Unix Shell 脚本 - expr 语法问题



我正在尝试查找当前目录的总大小,但 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 来添加大小。

相关内容

  • 没有找到相关文章

最新更新