【问题标题】:Count number of files in several folders with Unix command使用 Unix 命令计算多个文件夹中的文件数
【发布时间】:2021-08-15 12:07:07
【问题描述】:

我想计算每个文件夹中的文件数。对于一个文件夹,我可以这样做:

find ./folder1/ -type f | wc -l

我可以对每个文件夹(文件夹 2、文件夹 3、...)重复此命令,但我想知道是否可以使用一个命令获取信息。输出应如下所示:

folder1 13
folder2 4
folder3 1254
folder4 327
folder5 2145

我可以通过以下方式获取我的文件夹列表:

find . -maxdepth 1 -type d

返回:

./folder1
./folder2
./folder3
./folder4
./folder5

然后,我考虑将这个命令与第一个命令结合起来,但我不知道具体如何。也许使用“-exec”或“xargs”?

非常感谢。

【问题讨论】:

    标签: linux unix find command xargs


    【解决方案1】:

    使用xargs 的一种可能的解决方案是使用-I 选项,它将初始参数中出现的replace-str(下面的代码示例中的%)替换为从标准输入中读取的名称:

    find . -maxdepth 1 -type d -print0 | xargs -0 -I% sh -c 'echo -n "%: "; find "%" -type f | wc -l'
    

    如果您想使用wc 进行管道传输,还需要将find 命令传递给sh,否则wc 将计算所有目录中的文件。

    另一种解决方案(可能不那么神秘)是使用单行 for 循环:

    for d in */; do echo -n "$d: "; find "$d" -type f | wc -l; done
    

    【讨论】:

    • 非常感谢!我的文件夹未命名为“folder1”、“folder2”等。这是示例。然后,我正在尝试调整命令行,例如:for d in $(find . -maxdepth 1 -type d); do echo -n "$d: "; find $d -type f | wc -l; done 我的问题是我的一些文件夹的名称中有空格,我不知道如何处理...
    • 我已经设法解决了我的空间问题:for d in $(find . -maxdepth 1 -type d | sed "s/ /99space99/"); do echo -n "${d//99space99/ }: "; find "${d//99space99/ }" -type f | wc -l; done。这行得通,但它很丑……
    • 我编辑了答案以处理带有空格的目录。对于带有 xargs 的版本,只需使用 print0-0 选项的组合。在这种情况下,分隔符将是 NULL 字符而不是空格。第二个版本依赖 Bash 扩展来引用目录。但是,它不适用于隐藏目录。您还可以更改$IFS 变量的值:请参阅此帖子stackoverflow.com/questions/4895484/…
    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2012-12-07
    • 2016-10-15
    • 2015-07-19
    • 2019-01-06
    • 1970-01-01
    相关资源
    最近更新 更多