我正在尝试查找当前目录的总大小,但 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"
尝试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
du 返回大小和文件名,你只需要总大小。尝试更改尺寸分配
fsize=$(du -b $filename | awk '{print $1}')
目录内容的总大小,不包括子目录和目录本身:
find . -maxdepth 1 -type f | xargs du -bS | awk '{s+=$1} END {print s}'
du 会给出目录使用的实际空间,所以我不得不使用"find"来真正只匹配文件,而 awk 来添加大小。