我试图获取特定文件夹中所有 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