希望我能够用find命令来做到这一点,但我在手册中看不到任何测试来做我想做的事。我希望能够在工作目录中找到包含小于、大于或恰好是我指定的计数的任何目录。
find . -filecount +10 # any directory with more than 10 entries
find . -filecount 20 # any directory with exactly 20 entries
Run Code Online (Sandbox Code Playgroud)
但可惜没有这样的选择。
ter*_*don 25
您可以尝试此操作,以获取子目录名称及其包含的文件/目录数:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;
Run Code Online (Sandbox Code Playgroud)
如果您想对所有子目录(递归查找)执行相同操作,请改用:
find . -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;
Run Code Online (Sandbox Code Playgroud)
选择那些正好有 10 个文件的目录:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; |
awk '$NF==10'
Run Code Online (Sandbox Code Playgroud)
10个或更多:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; |
awk '$NF>=10'
Run Code Online (Sandbox Code Playgroud)
10 或更少:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; |
awk '$NF<=10'
Run Code Online (Sandbox Code Playgroud)
如果您只想保留目录名称(例如,您想按照@evilsoup 的建议将其通过管道传输到下游的另一个进程),您可以使用以下命令:
find . -maxdepth 1 -type d -exec bash -c "echo -ne '{}\t'; ls '{}' | wc -l" \; |
awk -F"\t" '$NF<=10{print $1}'
Run Code Online (Sandbox Code Playgroud)
小智 6
Terdon 的答案通常很好地说明了正确的方法,但是这里有一个稍微简短的答案,它只使用findand bash(不需要ls, wcand awk),并且还可以处理包含换行符的文件或目录。
find . -type d -exec /bin/bash -c 'a=( "{}"/* ); [[ ${#a[*]} == 10 ]]' ';' -print
| 归档时间: |
|
| 查看次数: |
18061 次 |
| 最近记录: |