我有一个bash脚本,需要知道目录中所有gzip文件的字节数。 现在,我假设它只是一个没有子目录的单个目录。 做这样的事情是非常诱人的:
du -scb /my/dir/*.gz|tail -n 1
但是,我有一个TON的文件。 *.gz
不会扩展到某种溢出状态吗? 有没有更快,更安全的方法来检查这个数字?
这工作,是“安全”的:
(find . -type f -print0 | xargs -0 stat -c '%s' | tr '\n' '+'; echo 0) | bc
怎么运行的:
find
来查找'.gz'文件。 用nul-separator打印它们,所以我们可以处理奇怪的文件名。 xargs
将把文件名组分割成可管理的块。 给这些文件名stat -c '%s'
来获取字节的大小(谢谢@Fritschy)。 tr
将换行符转换为+
。 回声在最后加上一个0加上一个换行符。 这是因为我们不会得到一个悬而未决的加号,而且在输入结束时, bc
需要一个换行符。 echo $(( $(find . -type f -name '*.gz' -printf '%s+') 0 ))
如果您需要巨大的值,请将'%s+'
更改为'%s+0'
并将$(( ... 0 ))
更改为... | bc
... | bc
编辑 :对于更大的值,你可能想使用%k
而不是%s
,给你千字节。 由于整数可能溢出。
由于我们只使用bash中的内置函数,所以我不确定可执行文件的参数长度是否有问题。