Disk-Usage

如何通過目錄遞歸計算所有文件

  • March 20, 2022

我想查看子目錄中有多少文件,以找出系統上所有 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
...

引用自:https://unix.stackexchange.com/questions/4105