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

标签 linux bash shell terminal

我有一个像这样的程序(函数)

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/

相关文章:

linux - 从 Bash 中的变量获取特定值

linux - 速率高时检测到 httperf 缓冲区溢出

Linux bash,获取 getopt 默认参数

linux - 使用 sed 或 awk 或新安装的 Debian 9 中的工具,如何添加未修剪的文本?

c - 从命令行将输出重定向到 C 中的文本文件

linux - Shell 脚本 - 读取 Server#1 上的内容,在 Server#2 上进行处理

linux - 在 shell 脚本中比较两个不同文件中的两列

我可以将 GCC 作为守护进程运行(或将其用作库)吗?

c++ - printf 网络数据

linux - 从 wifi 访问以太网 ip