获取包含超过 20,000 个文件/子目录的目录列表

获取包含超过 20,000 个文件/子目录的目录列表

我想要获取包含超过 20,000 个文件/子目录的所有目录的列表。

例如:

Folder A
|_ Folder A1
  |_ Folder A11
    |_ 25,000 files
  |_ 15,000 files
|_ Folder A2
  |_ 21,000 files
|_ 10 files

我想得到以下列表:

Folder A11
Folder A2

我怎样才能做到这一点?

答案1

目录中的名称数量可以使用 进行计数set -- *。然后在 中找到计数$#

使用find,您可以执行命令并在简短的内联 shell 脚本中set测试 的值:$#

find . -type d -exec sh -c '
    for dirpath do
        set -- "$dirpath"/*
        [ "$#" -gt 20000 ] && printf "%s\n" "$dirpath"
    done' sh {} +

内联sh -c脚本将批量获取找到的目录路径名作为参数。该脚本迭代一批这些路径名并扩展*每个路径名中的 glob。如果结果列表包含严格超过 20000 个字符串,则使用 输出目录路径名printf

也算名称,您可能希望切换到使用bashdotglobshell 选项集来调用 shell:

find . -type d -exec bash -O dotglob -c '
    for dirpath do
        set -- "$dirpath"/*
        [ "$#" -gt 20000 ] && printf "%s\n" "$dirpath"
    done' bash {} +

请注意,如果您想要如果您将其作为上面内联脚本的一部分(而不是说,find尝试解析命令的输出):

find . -type d -exec bash -O dotglob -c '
    for dirpath do
        set -- "$dirpath"/*
        [ "$#" -gt 20000 ] || continue

        # Process "$dirpath" here

    done' bash {} +

相关内容