查找按多个扩展名过滤的文件


Answers:


75

您可以将不同的搜索表达式与逻辑运算符-or或结合使用-and,因此您的情况可以写为

find . -type f \( -name "*.shtml" -or -name "*.css" \)

这也表明使用引号时无需转义特殊的外壳字符。

编辑

由于-or具有优先级低于隐含-and之间-type和第一-name放名称部分为括号由克里斯建议。


这还将打印名为“ * .css”的目录。
Teddy '04

嗯,更新版本中的括号放错了位置。各个括号需要以单独的参数结尾才能找到,因此它们之间需要有空格(“ .css”)`,结果是单个字符串值;它与(例如). Second, the parentheses need to go around whole ‘primaries’ (the open parenthesis needs to be before 。`.css )'- name`相同,而不是在其'operand'之间)。
克里斯·约翰森


12

您需要括号以仅包括文件:

find . -type f \( -name "*.shtml" -o -name "*.css" \) -print

奖励:这是POSIX兼容的语法。


4

我经常发现自己最终使用egrep或更长的管道,或者使用perl来使用更复杂的过滤器:

find . -type f | egrep '\.(shtml|css)$'
find . -type f | perl -lne '/\.shtml|\.css|page\d+\.html$/ and print'

它的效率可能有所降低,但这通常不是问题,对于更复杂的内容,通常更易于构建和修改。

标准警告适用于文件名异常的文件(例如,包含换行符)不使用此功能。


+1是一个干净的模块化解决方案,通常在处理搜索结果文件时会出现性能瓶颈。
Cristik '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.