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

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

这会产生这样的结果:

  151552
  319488
 1536000
  225280

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


当前回答

纯bash

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

其他回答

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

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

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

当你有统计时,整个ls -l然后cut是相当令人费解的。它也容易受到ls -l的确切格式的影响(直到我改变了cut的列号才起作用)。

此外,固定无用的使用猫。

<files.txt xargs stat -c %s | paste -sd+ - | bc

纯bash

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

TMTWWTDI: Perl有一个文件大小操作符(-s)

perl -lne '$t+=-s;END{print $t}' files.txt

管呆了:

 cat files.txt | xargs ls -l | cut -c 23-30 | gawk 'BEGIN { sum = 0 } // { sum = sum + $0 } END { print sum }'