给定files.txt中的文件列表,我可以得到它们的大小列表,如下所示:

cat files.txt | xargs ls -l | cut -c 23-30

这会产生这样的结果:

  151552
  319488
 1536000
  225280

我怎样才能得到所有这些数字的总数呢?


当前回答

在我看来,最简单的解决方案是"expr" unix命令:

s=0; 
for i in `cat files.txt | xargs ls -l | cut -c 23-30`
do
   s=`expr $s + $i`
done
echo $s

其他回答

这里是我的

cat files.txt | xargs ls -l | cut -c 23-30 | sed -e :a -e '$!N;s/\n/+/;ta' | bc

在我看来,最简单的解决方案是"expr" unix命令:

s=0; 
for i in `cat files.txt | xargs ls -l | cut -c 23-30`
do
   s=`expr $s + $i`
done
echo $s

我发现自己会用jq来做这样的事情,即使不使用JSON:

$ echo -e '1\n2\n3' | jq --slurp add
6

它已经成为我最近编写的几乎每个脚本的标准依赖项。

我会用“du”来代替。

$ cat files.txt | xargs du -c | tail -1
4480    total

如果你只想要数字:

cat files.txt | xargs du -c | tail -1 | awk '{print $1}'

而不是使用cut从ls -l的输出中获取文件大小,你可以直接使用:

$ cat files.txt | xargs ls -l | awk '{total += $5} END {print "Total:", total, "bytes"}'

Awk将“$5”解释为第五列。这是ls -l中的列,它提供了文件大小。