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 列出目錄及檔案數量(容量)”