Files

為什麼 find -exec du 總結起來不同?

  • December 2, 2016

我在文件夾 /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$'確認。

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