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

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

这会产生这样的结果:

  151552
  319488
 1536000
  225280

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


当前回答

我会用“du”来代替。

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

如果你只想要数字:

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

其他回答

如果你只想使用shell脚本而不使用awk或其他解释器,你可以使用下面的脚本:

#!/bin/bash

total=0

for number in `cat files.txt | xargs ls -l | cut -c 23-30`; do
   let total=$total+$number
done

echo $total

如果您没有安装BC,请尝试

echo $(( $(... | paste -sd+ -) ))

而不是

... | paste -sd+ - | bc

$() <——返回执行命令的值

$((1+2)) <——返回求值结果

Echo <——将它回显到屏幕

... | paste -sd+ - | bc

是我找到的最短的一个(来自UNIX命令行博客)。

编辑:增加了-参数的可移植性,谢谢@Dogbert和@Owen。

我会用“du”来代替。

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

如果你只想要数字:

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

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

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