我有一个程序(函数),例如
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
}
计算文件:
find . -type f | wc -l
计数目录
find . -type d | wc -l
.
代表当前目录。如果查看其他目录,请用适当的路径替换。
我相信您只需要设置nullglob
即可避免计算此Glog模式:
shopt -s nullglob
测试:在空目录中执行此操作:
> echo ./.[!.]*
./.[!.]*
> shopt -s nullglob
> echo ./.[!.]*
>