给定files.txt中的文件列表,我可以得到它们的大小列表,如下所示:
cat files.txt | xargs ls -l | cut -c 23-30
这会产生这样的结果:
151552
319488
1536000
225280
我怎样才能得到所有这些数字的总数呢?
给定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 }'