-1

我正在尝试查找当前目录的总大小,并且 shell 脚本在 expr 命令中失败。下面是我的代码:

#!/bin/sh
echo "This program summarizes the space size of current directory"

sum=0

for filename in *.sh
do
    fsize=`du -b $filename`
    echo "file name is: $filename Size is:$fsize"
    sum=`expr $sum + $fsize`        
done
echo "Total space of the directory is $sum"
4

2 回答 2

1

试试du -b somefile。它将像这样打印大小和名称:

263     test.sh

然后,您尝试以算术方式添加大小和名称,sum这将永远无法工作。

您需要切掉文件名,或者更好地使用,stat而不是du

fsize=`stat -c "%s" $filename`

...并且bash有一种更简洁的方法来进行此处描述的数学运算:

sum=$(($sum + $fsize))

输出:

This program summarizes the space size of current directory
file name is: t.sh Size is:270
Total space of the directory is 270
于 2017-01-20T20:40:05.543 回答
0

du 返回大小和文件名,您只需要总大小。尝试更改您的 fsize 分配

fsize=$(du -b $filename | awk '{print $1}')

目录内容的总大小,不包括子目录和目录本身:

find . -maxdepth 1 -type f | xargs du -bS | awk '{s+=$1} END {print s}'

du 将给出目录使用的实际空间,所以我不得不使用“查找”来真正只匹配文件,并使用 awk 来添加大小。

于 2017-01-20T20:37:35.617 回答