我有一个shell脚本来计算我所有的文件和目录大小使用递归函数这里是我的代码:
#!/bin/bash
count() {
local file
total=$2
files=(`ls $1`)
for file in "$files"
do
if [ -d "$1/$file" ]
then
count "$1/$file" $total
else
#size=`du $file | grep -o [0-9]*`
#total=$(($2 + $size))
echo "$1/$file"
fi
done
}
total=0
count . $total
echo "$total"
我有错误的地方,它只是进入第一个目录打印文件并停止。我的错误在哪里?:)
3条答案
按热度按时间qlckcl4x1#
注意:递归壳函数方法在真实的生活中是次优的(假设有特定的实用程序,如
du
可以完成这项工作),但需要满足OP的特定要求。演示了几种高级
bash
技术的代码修订版本;请注意,该函数已重命名为sumFileSizes
,以更好地反映其用途:-i
将其类型指定为整数的变量"$1/"*
stdout
输出“返回”所需结果**,并使用命令替换($(...)
)捕获它,而不是尝试“通过引用”传递变量(bash
不直接支持)。< <(...)
)使用进程替换将命令的输出作为另一个命令的输入。shopt
设置)。6yjfywim2#
这一行是错误的:
它应该是:
$files
只扩展到数组的第一个元素。yxyvkwin3#
如果你想递归地得到一个目录的大小,试试这个:
-h表示人类可读,-s表示摘要