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

时间:2010-12-14 23:37:36

标签: linux bash

我有一个bash脚本需要知道目录中所有gzip文件的字节数。现在,我假设它只是一个没有子目录的目录。做这样的事很有诱惑力:

du -scb /my/dir/*.gz|tail -n 1

但是,我有一大堆文件。 *.gz不会扩展到某种溢出条件吗?有没有更快,更安全的方法来检查这个数字?

2 个答案:

答案 0 :(得分:4)

这有效且“安全”:

(find . -type f -print0 |
  xargs -0 stat -c '%s' |
  tr '\n' '+'; echo 0) |
  bc

工作原理:

  • 首先,使用find查找'.gz'文件。使用nul-separator打印它们,这样我们就可以处理奇怪的文件名。
  • xargs会将文件名组分解为可管理的块。将这些文件名提供给stat -c '%s'以获取字节大小(感谢@Fritschy)。
  • tr将换行符转换为+。 echo在末尾添加一个额外的0加一个换行符。这样我们就不会有悬挂的加号,bc在输入结束时需要换行。
  • 将巨额资金投入bc。

答案 1 :(得分:1)

echo $(( $(find . -type f -name '*.gz' -printf '%s+') 0 ))

如果您需要巨大的值,请将'%s+'更改为'%s+0'并将$(( ... 0 ))更改为... | bc

修改:对于更大的值,您可能希望使用%k代替%s,从而获得千字节数。因为整数可能会溢出。

由于我们只在bash中使用内置函数,因此我不确定可执行文件的参数长度是否有问题。