Disk-Usage
如何通過目錄遞歸計算所有文件
我想查看子目錄中有多少文件,以找出系統上所有 inode 的使用情況。有點像我會這樣做是為了空間使用
du -sh /*
這將為我提供根目錄以外的目錄中使用的空間,但在這種情況下,我想要文件的數量,而不是大小。
find . -maxdepth 1 -type d | while read -r dir do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
感謝 Gilles 和 xenoterracide 的安全/兼容性修復。
第一部分:
find . -maxdepth 1 -type d
將返回目前工作目錄中所有目錄的列表。(警告:-maxdepth
是一個 GNU 擴展,可能不存在於非 GNU 版本中find
。)這是通過管道傳輸到…第二部分:(
while read -r dir; do
如上所示while read -r dir
(newline)do
)開始一個while
循環——只要進入的管道while
是打開的(直到發送整個目錄列表),該read
命令會將下一行放入變數dir
。然後繼續……第三部分:
printf "%s:\t" "$dir"
將列印字元串$dir
(其中包含一個目錄名稱),後跟一個冒號和一個製表符(但不是換行符)。第四部分:
find "$dir" -type f
列出目錄中所有文件名在$dir
. 此列表發送至…第五部分:
wc -l
計算發送到其標準輸入的行數。最後一部分:
done
簡單地結束while
循環。所以我們得到了目前目錄中所有目錄的列表。對於每個目錄,我們生成其中所有文件的列表,以便我們可以使用
wc -l
. 結果將如下所示:./dir1: 234 ./dir2: 11 ./dir3: 2199 ...