我拼命想为find命令编写模式,但它永远不会有效。我想搜索所有*.txt
和*.h
个文件:
find . -name "*(*.h|*.txt)"
find . -name "(*.h|*.txt)"
find . -name *(*.h|*.txt)
find . -name "*\(*.h|*.txt\)"
find . -name '*("*.h"|"*.txt")'
答案 0 :(得分:3)
使用此表达式:
find . -type f \( -name "*.h" -or -name "*.txt" \)
-type f
只找到文件。-name \( logical condition \)
只是与您指定的文件扩展名匹配。答案 1 :(得分:3)
你走了:
find . -name '*.h' -o -name '*.txt'
如果您的条件不仅仅是名称,例如修改时间少于5天,那么您最有可能想要对多个名称条件进行分组,如下所示:
find . -mtime -5 \( -name '*.h' -o -name '*.txt' \)
这样你的条件就变成了“TIME AND(NAME1或NAME2)”,没有分组,它将是“TIME AND NAME1 OR NAME2”,这是不一样的,因为后者将被评估为“(TIME AND NAME1 )或NAME2“。
嗯,这取决于你想做什么,只要记住当你使用这样的OR条件时,你可能需要使用\( ... \)
进行分组,如上例所示。
<强>更新强>
如果您的find
版本支持-regex
标记,则另一个解决方案:
find . -regex '.*\.\(txt\|h\)'
我认为这更像你要找的东西; - )
虽然-name pattern
中的模式可以与*
,?
和[]
等常规shell模式匹配,但它们似乎无法与extended patterns匹配,即使extglob
已启用。