统计目录中所有gzip文件的字节数

我有一个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中的内置函数,所以我不确定可执行文件的参数长度是否有问题。