为什么 find -exec du 总结不同?

Jan*_*Jan 4 size find directory-structure files

我在文件夹 /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(级别=0)
  • du (GNU coreutils) 8.13

Sté*_*las 6

find ... -exec cmd {} +cmd根据需要执行多次,以免破坏传递给命令的参数大小的限制。

使用时find . -exec du {} +,文件列表的大小比使用时小find verylongdirname -exec du {} +

所以很可能find verylongdirname会运行dufind .一个更多的命令。你最后看到的总数是上次运行的总数du,它不包括所有文件(之前会有更多的总数,你可以通过管道命令grep 'total$'来确认。