我正在编写一个小脚本来计算文件的总大小。我有一个文件,其中包含我必须检查的文件列表,我遍历它们,我想打印出总大小。这是我到目前为止所做的,但由于某种原因,我得到0作为总数
for file in `cat $LISTFILES`
do
echo "Processing files: " $file
actualsize=$(du -b "$file" | cut -f 1)
sum=0
sum=$sum+$actualsize
echo $sum
done
echo 'done'
echo $sum
两个echo $sum
都返回0
我似乎无法弄清楚出了什么问题。
答案 0 :(得分:4)
您在每个步骤中归零sum
:
sum=0
while read file;
do
echo "Processing files: " $file
actualsize=$(du -b "$file" | cut -f 1)
# wrong syntax
# sum=$sum+$actualsize
# correct
sum=$((sum+actualsize))
echo $sum
done<"$LISTFILES"
echo $sum
你的语法也错了:
你应该这样做:$((sum+actualsize))
检查bash aritmetics
答案 1 :(得分:3)
您应该使用while read
代替for ... $(...)
。 while read
更快,更不容易出错。另外,请参阅stat命令以获取文件大小。 stat命令可能因系统而异,请参阅您的联机帮助页。这是使用在BSD / Mac OS X上找到的那个.Linux可能是stat -c%s
。这就是Linux手册在网上所说的内容。再次,使用man
来解决这个问题。另外,要记住文件名中的空格。使用$file
周围的引号来考虑这一点。
在回答你的问题时,你需要把数学放在$((....))
:
while read file #for file in `cat $LISTFILES`
do
echo "Processing files: '$file'"
actualsize=$(stat -f%x "$file")
sum=0
sum=$(($sum+$actualsize))
echo $sum
done < $LISTFILES #Assuming this is a file that contains the list...
echo 'done'
echo $sum