我想要获取包含超过 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
。
也算隐名称,您可能希望切换到使用bash
其dotglob
shell 选项集来调用 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 {} +