正确的语法是:
find . -type f -name \*.\(shtml\|css\)
这有效,但是很优雅:
find . -type f -name \*.shtml > f.txt && find . -type f -name \*.css >> f.txt
怎么做,但击键次数更少?
正确的语法是:
find . -type f -name \*.\(shtml\|css\)
这有效,但是很优雅:
find . -type f -name \*.shtml > f.txt && find . -type f -name \*.css >> f.txt
怎么做,但击键次数更少?
Answers:
您可以将不同的搜索表达式与逻辑运算符-or
或结合使用-and
,因此您的情况可以写为
find . -type f \( -name "*.shtml" -or -name "*.css" \)
这也表明使用引号时无需转义特殊的外壳字符。
编辑
由于-or
具有优先级低于隐含-and
之间-type
和第一-name
放名称部分为括号由克里斯建议。
). Second, the parentheses need to go around whole ‘primaries’ (the open parenthesis needs to be before
。`.css )'- name`相同,而不是在其'operand'之间)。
我经常发现自己最终使用egrep或更长的管道,或者使用perl来使用更复杂的过滤器:
find . -type f | egrep '\.(shtml|css)$'
find . -type f | perl -lne '/\.shtml|\.css|page\d+\.html$/ and print'
它的效率可能有所降低,但这通常不是问题,对于更复杂的内容,通常更易于构建和修改。
标准警告适用于文件名异常的文件(例如,包含换行符)不使用此功能。