假设有一个图像存储目录,例如,,./photos/john_doe
其中有多个子目录,其中驻留许多特定文件(例如,*.jpg
)。如何计算分支下这些文件的摘要大小john_doe
?
我尝试过du -hs ./photos/john_doe/*/*.jpg
,但这仅显示单个文件。此外,这仅跟踪目录的第一个嵌套级别john_doe
,例如john_doe/june/
,但跳过john_doe/june/outrageous/
。
那么,我如何遍历整个分支,总结某些文件的大小?
答案1
find ./photos/john_doe -type f -name '*.jpg' -exec du -ch {} + | grep total$
如果由于文件列表很长而需要多次调用du
,则将报告多个总计并需要求和。
答案2
du -ch public_html/images/*.jpg | grep total
20M total
给出.jpg
该目录中文件的总使用情况。
要处理多个目录,您可能必须以find
某种方式将其结合起来。
你可能会发现du 命令示例有用(还包括find
)
答案3
答案4
到目前为止给出的答案没有考虑到从 find 传递到 du 的文件列表可能很长,以至于 find 会自动将列表分割成块,从而导致total
.
您可以grep total
(区域设置!)手动总结,或使用不同的命令。据我所知,只有两种方法可以获取 find 找到的所有文件的总计(以千字节为单位):
find . -type f -iname '*.jpg' -print0 | xargs -r0 du -a| awk '{sum+=$1} END {print sum}'
说明
find . -type f -iname '*.jpg' -print0
:查找所有扩展名为 jpg 的文件,无论大小写(即 *.jpg、*.JPG、*.Jpg...)并输出它们(以 null 结尾)。
xargs -r0 du -a
: -r: 即使没有传递参数,Xargs 也会调用该命令,而 -r 会阻止这种情况。 -0 表示以空字符结尾的字符串(不是以换行符结尾)。
awk '{sum+=$1} END {print sum}'
:总结上一个命令输出的文件大小
作为参考,另一种方式是
find . -type f -iname '*.jpg' -print0 | du -c --files0-from=-