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

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

这会产生这样的结果:

  151552
  319488
 1536000
  225280

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


当前回答

我喜欢使用....

echo "
1
2
3 " | sed -e 's,$, + p,g' | dc 

它们会显示每一行的和…

适用于这种情况:

ls -ld $(< file.txt) | awk '{print $5}' | sed -e 's,$, + p,g' | dc 

Total是最后一个值…

其他回答

如果文件名中有空格,Cat将不起作用。下面是一个perl单行程序。

perl -nle 'chomp; $x+=(stat($_))[7]; END{print $x}' files.txt

纯bash

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

我喜欢使用....

echo "
1
2
3 " | sed -e 's,$, + p,g' | dc 

它们会显示每一行的和…

适用于这种情况:

ls -ld $(< file.txt) | awk '{print $5}' | sed -e 's,$, + p,g' | dc 

Total是最后一个值…

这里是

cat files.txt | xargs ls -l | cut -c 23-30 | 
  awk '{total = total + $1}END{print total}'

如果你只想使用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