查找包含多个相同扩展名文件的目录

fsw*_*ngs 5 linux command-line find

我正在使用 Debian 8.0,例如想查找包含 1 个以上.mkv文件的目录。我试过这个,但失败了:

find -type d -exec find {} -name '*.mkv' | wc -l\;
Run Code Online (Sandbox Code Playgroud)

SuperUser 上有一个类似的问答,我无法适应。这对我也不起作用:

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; find '{}' -name '*.mkv' | wc -l" \; |   awk '$NF>=2'
Run Code Online (Sandbox Code Playgroud)

错误消息指向一个语法错误:

bash: -c: line 0: syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)

这样做的原因是目录的名称是这样的:

Directory With Space and (Brackets)
Run Code Online (Sandbox Code Playgroud)

Bri*_*fer 5

我建议指示 find 查找所有文件并打印出每个匹配项的包含目录,因此您无需担心解析奇怪的字符串。然后使用 uniq 计算重复项并使用 awk 过滤第一个字段,打印出出现多次的字段。例如

find . -type f -iname '*.mkv' -printf '%h\n'|sort|uniq -c | awk '$1 > 1'
Run Code Online (Sandbox Code Playgroud)

  • 出色的!我的第一个想法是“find -d -exec sh -c 'ls -d {}/*.mkv |” 厕所-l'| ……`;你的解决方案更加优雅。建议:使用`uniq -cd`可以消除`awk`。 (2认同)