我有一个像这样的程序(函数)
countf()
{
for f in "$1"/* "$1"/.[!.]*; do
if [ -d "$f" ];
then
folders=$(($folders + 1))
countf "$f"
else
files=$(($files + 1))
fi
done
}
当文件夹至少包含 1 个隐藏文件时,它会给出正确的值。但是,它假定“$1/.[!.]*”为一个文件,并在没有隐藏文件时对其进行计数。
这是我解决这个问题的方法
countf()
{
for f in "$1"/* "$1"/.[!.]*; do
if [ -d "$f" ];
then
folders=$(($folders + 1))
countf "$f"
else
# added if else
if [ "$f" != "$1/.[!.]*" ]; then files=$(($files + 1)); fi
fi
done
}
我无法使用查找。
最佳答案
如果没有隐藏文件,则该模式将按字面意思处理,并且由于它不是目录,因此您假设它是一个文件。只需验证 $f
是一个文件,就像在增加文件计数之前检查它是否是一个目录一样。
countf()
{
for f in "$1"/* "$1"/.[!.]*; do
if [ -d "$f" ];
then
folders=$(($folders + 1))
countf "$f"
elif [ -f "$f" ]
then
files=$(($files + 1))
fi
done
}
关于linux - 计算所有文件和文件夹,包括隐藏在 bash 中的文件和文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21293326/