Linux 系統中目錄層級深、檔案數龐大,手動統計不切實際。本文比較 find、tree、du 三種指令的統計差異,並說明為何推薦使用 find 獲得最精確結果。
以 pma 目錄為例,實際包含 124 個子目錄、987 個檔案。
[root@localhost ~]# find pma -type d | wc -l
125
[root@localhost ~]# find pma/ -type d | wc -l
125
[root@localhost ~]# find pma/* -type d | wc -l
124 # 正確值
差異原因:find pma 與 find pma/ 會將 pma 本身列入結果(首行輸出即為 pma),而 find pma/* 僅展開其下層,不含父目錄本身。
[root@localhost ~]# find pma -type f | wc -l
987
[root@localhost ~]# find pma/ -type f | wc -l
987
[root@localhost ~]# find pma/* -type f | wc -l
987
檔案統計三種寫法結果一致,因 -type f 不會匹配目錄本身。
[root@localhost ~]# tree pma
...
124 directories, 984 files
[root@localhost ~]# tree pma/
...
124 directories, 984 files
tree 統計檔案數為 984,少於實際 987,原因未深究,但已證實不準確。
[root@localhost ~]# du -ah pma/* | wc -l
1111
du 統計總項目數 1111,扣除子目錄 124,推算檔案數 987,與 find 一致。但需額外計算,不如 find 直觀。
find 目錄/* -type d | wc -lfind 目錄 -type f | wc -lfind 結果最準確、語意最清晰,建議作為標準做法。