size=`ls -l /var/temp.* | awk '{ print $5}'`
fin_size=0
for row in ${size} ;
do
fin_size=`echo $(( $row + $fin_size )) | bc`;
done
echo $fin_size
不工作!! echo $fin_size
正在抛出一些减去垃圾的垃圾。
在哪里我错了?
(我的bash很旧,我想在这个只有Linux内核中工作:2.6.39)
答案 0 :(得分:2)
答案 1 :(得分:1)
因为它不够强调:Why you shouldn't parse the output of ls(1)
使用例如按照dogbane的建议du
,或find
:
$ find /var -maxdepth 1 -type f -name "temp.*" -printf "%s\n" | awk '{total+=$1}END{print total}'
或stat
:
$ stat -c%s /var/temp.* | awk '{total+=$1}END{print total}'
或globbing和stat
(不必要,慢):
total=0
for file in /var/temp.*; do
[ -f "${file}" ] || continue
size="$(stat -c%s "${file}")"
((total+=size))
done
echo "${total}"
答案 2 :(得分:-1)
下面应该足够了:
ls -l /var/temp.* | awk '{a+=$5}END{print a}'
无需运行for循环。这意味着:
size=ls -l /var/temp.* | awk '{ print $5}'`
fin_size=0
for row in ${size} ;
do
fin_size=`echo $(( $row + $fin_size )) | bc`;
done
echo $fin_size
以上所有内容都可以替换为:
fin_size=`ls -l /var/temp.* | awk '{a+=$5}END{printf("%10d",a);}'`
echo $fin_size