2
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)

4

3 回答 3

2

不要解析ls

为什么不使用du如下图?

du -cb /var/temp.* | tail -1 
于 2013-05-13T07:51:07.500 回答
1

因为压力不够大:为什么不应该解析 ls(1) 的输出

du按照 dogbane 的建议使用例如,或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}'

通配符stat(不必要的,缓慢的):

total=0
for file in /var/temp.*; do
    [ -f "${file}" ] || continue
    size="$(stat -c%s "${file}")"
    ((total+=size))
done
echo "${total}"
于 2013-05-13T11:01:58.340 回答
-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
于 2013-05-13T07:06:47.953 回答