如何仅列出其中至少包含两个超过 100 MB 文件的文件夹?
答案1
与find
和awk
:
列出所有> 100M的文件
$ find . -type f -size +100M
./bar/ok
./foo/okp
./foo/ok
现在过滤awk
:
$ find . -type f -size +100M -exec dirname {} + |
awk '{dir[$0]++}END{for (i in dir) if (dir[i] >= 2) print i}'
./foo
根据要求,它仅输出至少包含两个大于 100M 文件的目录。
如果您的实现dirname
不支持同时支持多个目录,请使用命令{} \;
代替find
。
答案2
%h
使用 GNU 工具,您可以打印所有大于 100MiB 的文件的目录 ( ),并使用 打印一次所有重复结果uniq -d
。
为了处理包含换行符的目录名称,我们使用 NUL 字符(\0
和 option -z
)作为行终止符,并在最后一步中将其转换为换行符。
find . -type f -size +100M -printf '%h\0' | uniq -dz | tr '\0' '\n'
要为每个结果添加找到的匹配数 (>=2) 前缀,请-c
添加uniq
:
find . -type f -size +100M -printf '%h\0' | uniq -cdz | tr '\0' '\n'