Bash 文件列表中带有awk的文件大小总和
我有一个文件列表,并希望对其文件大小进行汇总。 因此,我创建了一个(全局)变量作为计数器,并尝试循环该列表,使用ls获取文件大小,然后使用Bash 文件列表中带有awk的文件大小总和,bash,awk,Bash,Awk,我有一个文件列表,并希望对其文件大小进行汇总。 因此,我创建了一个(全局)变量作为计数器,并尝试循环该列表,使用ls获取文件大小,然后使用 export COUNTER=1 for x in $(cat ./myfiles.lst); do ls -all $x | awk '{COUNTER+=$5}'; done 然而,我的柜台是空的 > echo $COUNTER > 1 有人对我的,我在这里缺少的东西有想法吗 干杯,谢谢, 托马斯 好的,我找到了一种将awk管道的结果管
export COUNTER=1
for x in $(cat ./myfiles.lst); do ls -all $x | awk '{COUNTER+=$5}'; done
然而,我的柜台是空的
> echo $COUNTER
> 1
有人对我的,我在这里缺少的东西有想法吗
干杯,谢谢,
托马斯
好的,我找到了一种将awk管道的结果管道化到变量中的方法 (这可能不优雅,但很有效;)
awk
会为每个文件调用,因此在计数器中,您会得到最后一个文件的大小
更好的解决方案是:
ls -all <myfiles.lst | awk '{COUNTER+=$5} END {print COUNTER}'
ls-all最新版本的较短版本:
ls -l | awk '{sum += $5} END {print sum}'
现在,假设您想按特定类型的文件、年龄等进行筛选。。。只需将ls-l放入find中,就可以使用find的广泛过滤器参数进行过滤:
find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
du
我在ubuntu13.10
上的命令不接受stdin
上的任何内容。如果没有给出FILES参数,它总是使用当前目录。啊,我没有想到du——但是我在您的方法ls-all之间得到了非常不同的结果。du-c$(cat./myfiles.lst)| awk'END{print$1}'
(假设文件名中没有空格:)或者更好:du-c--files0 from=对于那些从谷歌来到这里的人来说,关于du
的一点补充说明:添加-h
以使输出可读,例如使用1KB而不是1000。而不是ls-all$x | awk'{print$5}
usestat-c%s%x
如果我试图教某人如何使用awk,这将是我开始学习的示例。
ls -ltS | awk -F " " {'print $5'} | awk '{s+=$1} END {print s}'
ls -l | awk '{sum += $5} END {print sum}'
find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'