我有一个bash脚本,需要知道目录中所有gzip文件的字节数。现在,我假设它只是一个没有子目录的单一目录。这是非常诱人的做这样的事情:统计目录中所有gzip文件的字节数
du -scb /my/dir/*.gz|tail -n 1
不过,我有文件的TON。 *.gz
不会扩展到某种溢出状态吗?有没有更快,更安全的方法来检查这个数字?
我有一个bash脚本,需要知道目录中所有gzip文件的字节数。现在,我假设它只是一个没有子目录的单一目录。这是非常诱人的做这样的事情:统计目录中所有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
,找到 '广州' 的文件。用无分隔符打印它们,所以我们可以处理奇怪的文件名。xargs
将把文件名组拆分成可管理的块。将这些文件名分配给stat -c '%s'
以获取字节大小(谢谢@Fritschy)。tr
将换行符转换为+
。回声在最后加上一个0加上一个换行符。这是因为我们不会得到一个悬挂加号,并且bc
需要在输入结尾处换行。不错的,检查'统计(1)',它可以根据给定的格式统计文件和打印信息。 – 2010-12-14 23:54:20
@Fritschy:谢谢,我不知道'stat(1)'。纳入答案。 – 2010-12-15 00:05:02
echo $(($(find . -type f -name '*.gz' -printf '%s+') 0))
如果您需要巨大值,改变'%s+'
到'%s+0'
,改变$((... 0))
到... | bc
编辑:对于更大的价值,您可能需要使用%k
,而不是%s
,给你千字节。由于整数可能溢出。
因为我们只在bash中使用内置函数,所以我不确定可执行文件的参数长度是否有问题。
你看起来很好。任何体面的实现都将支持64位文件(我的意思是大于2GB),因此也支持64位总计。 – 2010-12-14 23:47:10
@Chris我认为他担心超出命令行长度限制。在大多数Linux系统中,它非常庞大(如果我没记错的话,它是128kB),但在一些* nixes中它非常小(我认为在Solaris上它大概是255字节)。 – 2010-12-14 23:54:28
命令行长度限制是我关心的问题。有没有办法从bash中设置和获取这个值? – User1 2010-12-15 20:12:42