Linux – Bash shell script 列出目錄及檔案數量(容量)

Loading

ls

ls 指令 – https://benjr.tw/24108只能很簡單的看目前所有檔案,一些要列出 該目錄下 所有目錄及檔案數量 的顯示方式都沒有辦法,須要透過標準表示式才能完成,這些指令是在網路上找到的.

  • 顯示當前目錄下 “./” 的檔案數目:
    #ls -laR |grep "^-" |awk 'END{print "Number of files:"NR}'
    
  • 顯示當前目錄下 “./” 的目錄數目:
    #ls -laR |grep "^d" |awk 'END{print "Number of directories:"NR}'
    

來看看是怎麼使用這些指令集合的,主要是 ls + grep + awk
#ls -laR
-l : 列出詳細資料
-a : 顯示所以檔案和目錄,包含 . 開頭的隱藏檔案
-R : recursive 一併顯示子目錄的目錄檔案

grep “^-“
“^” : 指匹配的字符串在行首
“^-” : 找出 – (- 表示為檔案,d 表示為目錄)的字符串在行首

awk ‘END{print “Number of files:”NR}’
awk ‘條件類型1{動作1} 條件類型2{動作2} …’ filename
條件類型是 END , 動作 是 print
print 的功能是將欄位資料列出來
單純顯示出 “Number of files:”(只顯示””內的字串,不包含””)
NR 表示 awk 所處理的資料是到 “第幾行” 了
filename 沒有指定是因為我們用了 | (pipeline) ,所以前面 #ls -laR |grep “^-” 處理完的資料會交由 awk 繼續處理.

[root@benjr ~]# pwd
/root
[root@benjr ~]# ls -laR |grep "^-" |awk 'END{print "Number of files."NR}'
Number of files:2512
[root@benjr ~]# ls -laR |grep "^d" |awk 'END{print "Number of directories."NR}'
Number of directories:3752

du

指令 du – https://benjr.tw/24121 可以顯示指定目錄的使用容量,但如果想同時知道個子目錄的使用容量需要搭配指令 #find 一同來使用.

  • 計算目錄中各個子目錄分別的容量:
    #find /home -maxdepth 1 -type d -exec du -sh {} \;
    

來看看是怎麼使用這些指令集合的,主要是 find , -exec , du
find
/home : 要計算的目錄
-maxdepth 1 : 只需要目錄的第一層.
-type d : 找出屬性為目錄 d (directory)

-exec du -sh {} \;
參數 -exec 將之前的結果轉向 du -sh 來處理 , {} 表示之前的結果 , \; 結束.

du
-s summarize 預設使用 Kilo bytes 為單位.
-h human 使用一般人容易閱讀的方式來顯示容量.

[root@benjr ~]# find /home -maxdepth 1 -type d -exec du -sh {} \;
40M /home
20M /home/user1
20M /home/user2

遇過的錯誤訊息:

{} \; 之前沒有空格

[root@localhost ~]# find /home -maxdepth 1 -type d -exec du -sh {}\;
find: missing argument to `-exec'
沒有解決問題,試試搜尋本站其他內容

One thought on “Linux – Bash shell script 列出目錄及檔案數量(容量)

  1. 自動引用通知: Linux command – grep | Benjr.tw

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料