获取指定扩展名的所有文件的总大小

获取指定扩展名的所有文件的总大小

我试图获取特定文件夹中所有 JPEG 的总大小,但在管道传输过程中,无论使用多少选项组合似乎都du无法实现这一点:

find -type f -iname "*.jpg" | du -sch
166G    .
166G    total

它们全部打印目录中每个文件的总数。

我如何才能获取我传递给的文件的总文件大小du

答案1

如果你只在一个目录中,就像你的问题中显示的那样,最简单的方法就是完全避免管道,而是

du -sch *.jpg

答案2

如果您du使用文件作为参数进行调用,则参数字符串的长度会受到限制(几千个文件)(*)。如果您需要大量文件,则必须使用参数在列表文件中提供文件--files0-from=F(可用于-标准输入):

find . -name '*.JPG' -print0 | du -msc --files0-from -

(*) 并且使用... | xargs du -c不会有帮助,因为 xargs 会分批切碎文件列表并调用du多次,因此您将得到多个总和......

答案3

我不确定为什么简单的管道传输du在这里不起作用(请随意发布答案详细说明原因),但我发现使用-exec执行du确实有效,并且+语法也非常快。

find -type f -iname "*.mov" -exec du -ch {} +

这使得它比管道更有效率,特别是因为我已经用它find来枚举文件。它还将匹配 JPEG 文件扩展名,无论它是什么大小写。

请注意,上述操作将打印每个文件及其单独大小,然后最终打印总数。要打印仅有的所有文件的总文件大小,使用:

find -type f -iname "*.mov" -exec du -ch {} + | tail -n1

相关内容