查找目录分支中某些文件的总大小

查找目录分支中某些文件的总大小

假设有一个图像存储目录,例如,,./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

首先,您需要两件事:

  • 选项-c,du告诉它生成总计;
  • 任何一个**激活说明) 或者find例子) 或遍历子目录。
du -ch -- **/*.jpg | tail -n 1

答案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=-

相关内容