文件列表中带有awk的文件大小总和



>我有一个文件列表,想要对它们的文件大小求和。因此,我创建了一个(全局)变量作为计数器,并尝试遍历该列表,使用 ls 获取文件大小并剪切并添加它

export COUNTER=1
for x in $(cat ./myfiles.lst); do ls -all $x | awk '{COUNTER+=$5}'; done

但是,我的柜台是空的?

> echo $COUNTER
> 1

有人对我的想法,我在这里缺少什么吗?

干杯和感谢, 托马斯


好的,我找到了一种方法将 awk 管道中的结果管道到变量中(这可能不优雅,但工作;))

for x in $(cat ./myfiles.lst); do a=$(ls -all $x |awk '{print $5}'); COUNTER=$(($COUNTER+$a)) ; done
> echo $COUNTER
> 4793061514
每个

文件都会调用awk,因此在COUNTER中,您得到了最后一个文件的大小。

更好的解决方案是:

ls -all <myfiles.lst | awk '{COUNTER+=$5} END {print COUNTER}'

但是你在这里重新发明了轮子。你可以做类似的事情

du -s <myfiles.lst 

(如果已安装du注意:请参阅我关于du的回答下面的评论。我已经用cygwin对此进行了测试,并且它就像一个魅力。

最后一个的简短版本:

ls -l | awk '{sum += $5} END {print sum}'

现在,假设您想按某些类型的文件、年龄等进行过滤......只需将 ls -l 放入查找中,您就可以使用 find 的广泛过滤器参数进行过滤:

find . -type f -exec ls -l {} ; | awk '{sum += $5} END {print sum}'
ls -ltS | awk -F " " {'print $5'} | awk '{s+=$1} END {print s}'

相关内容

  • 没有找到相关文章

最新更新