计算所有文件和文件夹,包括隐藏在bash中



我有一个程序(函数),例如

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 ./.[!.]*
>  

相关内容

  • 没有找到相关文章

最新更新