Unix查找:多种文件类型

Jac*_*cko 61 unix find

我想运行查找带有多种文件类型的-name.例如.

 find -name *.h,*.cpp
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Eri*_*son 88

$ find . -name '*.h' -o -name '*.cpp'
Run Code Online (Sandbox Code Playgroud)

要在man页面中查找此信息,请man find键入/OPERATORS并按Enter 键键入并搜索运算符.

.不与GNU找到绝对必要的,但需要在Unix中.在任何一种情况下,引号都很重要,如果这些类型的文件出现在当前目录中,则将它们排除将导致错误.

在某些系统(例如Cygwin)上,必须使用括号来使扩展集包含在内:

$ find . \( -name '*.h' -o -name '*.cpp' \)
Run Code Online (Sandbox Code Playgroud)

  • @Priyal` -o`代表"或" (5认同)
  • 由于OP提到UNIX,'.' 是_strictly_必要的.GNU find不需要它 (3认同)
  • 对我来说,在 Ubuntu 上,只要我希望它通过管道传输,例如 xargs,就需要括号。没有它,它仍然会*运行,但只使用我提到的最后一个扩展名*。 (2认同)

Pie*_*ave 19

这就是我用的东西

find . \( -name "*.h" -o -name "*.cpp" \) -print
Run Code Online (Sandbox Code Playgroud)

  • 这些parantheses很重要. (7认同)
  • 除非你觉得添加`-print`是新的有用的信息,否则最好提出一个现有的答案而不是添加重复. (4认同)

小智 10

find . -name "*.h" -or -name "*.cpp"
Run Code Online (Sandbox Code Playgroud)

适合我.

  • 请注意,并非所有版本的`find`(例如,在Solaris上)都支持`-or`而不是`-o` (5认同)

小智 8

find . -name '*.h' -o -name '*.cc'`
Run Code Online (Sandbox Code Playgroud)

适用于搜索文件.

find . \( -name '*.h' -o -name '*.cc' \)`
Run Code Online (Sandbox Code Playgroud)

适用于对它们执行命令

find . \( -name '*.h' -o -name '*.cc' \) -exec egrep "#include" {} \; -print | egrep "^\."
Run Code Online (Sandbox Code Playgroud)


Eva*_*van 5

您还可以使用该-regex实用程序:

find -E . -iregex ".*\.(js|jsx|html|htm)"

请记住,正则表达式会查看完整的绝对路径:

有关该正则表达式和测试用例的说明,请查看:https : //regex101.com/r/oY1vL2/1

-E(作为路径之前的标志)启用扩展的(现代)正则表达式。

这用于BSD find(Mac OSX 10.10.5)


xoy*_*abc 5

这就是我使用的。我强烈推荐“-regextype posix-extended”参数。

find . -type f -iname "*.log" -o -iname "*.gz" 
find . -type f \( -name "*.gz" -o -name "*.log" \)
find . -type f -regex '.*\(\.gz\|\.log\)'
find . -type f -regextype posix-extended -regex '.*.(log|gz)'
Run Code Online (Sandbox Code Playgroud)