如何递归计算目录中仅某些文件消耗的磁盘空间?
答案1
find -iname '*.jpg' -print0 | du --files0-from=- -h -c | tail -1
-iname
搜索不区分大小写-print0
写入NUL
而不是换行--files0-from=-
NUL
读取而不是换行符,从参数中读取stdin
而不是从参数中读取-h
以人类可读的格式输出结果(例如,1K
而不是1024
)-c
输出总计(例如,23G
)tail -1
将仅输出总计,抑制单个文件大小
答案2
和zsh
:
zmodload zsh/stat
stat -LA blocks +blocks -- **/*.jpg(NDoN)
print $(( (${(j[+])blocks} + 0) * 512 ))
将打印名称以 结尾的所有文件.jpg
(包括带有限定符的隐藏文件D
)的累积磁盘使用情况。请注意,如果同一个文件有多个硬链接,它们的磁盘使用量将被计算多次(这与大多数du
实现的做法不同)。
如果某些文件是或键入目录,这只会计算目录文件本身的磁盘使用情况,而不是遍历这些目录时可以找到的文件的磁盘使用情况(与 的另一个区别du
)。