為什麼 find -exec du 總結起來不同?
我在文件夾 /media/data/Selbstgemacht 中有家庭照片和電影,我想找到所有照片的大小。在 /media/data 我使用
find Selbstgemacht -type f -iname '*.jpg' -exec du -ch '{}' +
它返回 5,1GB。但是,如果我進入文件夾“Selbstgemacht”並使用
find . -type f -iname '*.jpg' -exec du -ch '{}' +
它返回 7,0GB。然後我比較了 find 的輸出以檢查它們是否找到相同的文件:
從父文件夾
find Selbstgemacht -type f -iname '*.jpg' -printf '%P\n' |sort > test1.txt
從子文件夾
find . -type f -iname '*.jpg' -printf '%P\n' |sort > ../test2.txt
這些文件是相同的,因此兩個 find 命令都找到完全相同的文件,這使我認為 du 報告的大小差異一定是由於其他原因。
這究竟是什麼原因?
系統資訊:
Debian 穩定版
查找(GNU findutils)4.4.2
- D_TYPE O_NOFOLLOW(啟用)
- LEAF_OPTIMISATION, FTS(), CBO(level=0)
du (GNU coreutils) 8.13
find ... -exec cmd {} +
將根據需要執行cmd
多次,以免打破傳遞給命令的參數大小的限制。使用時
find . -exec du {} +
,文件列表的大小比使用時小find verylongdirname -exec du {} +
。所以它可能
find verylongdirname
會執行du
比一個更多的命令find .
。最後看到的總數是最後一次執行的總數,du
不包括所有文件(之前會有更多總數,您可以通過管道命令grep 'total$'
確認。