Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix查找:多种文件类型_Unix_Find - Fatal编程技术网

Unix查找:多种文件类型

Unix查找:多种文件类型,unix,find,Unix,Find,我想用多种文件类型运行find-name。 例如 这可能吗 $ find . -name '*.h' -o -name '*.cpp' 要在man页面中查找此信息,请键入man find,然后通过键入/operators搜索运算符,然后按enter键 对于GNU-find不是严格必需的,但是在Unix中是必需的。在这两种情况下,引号都很重要,如果这些类型的文件出现在当前目录中,省略引号将导致错误 在某些系统(如Cygwin)上,圆括号是使扩展集包含在内所必需的: $ find . \( -na

我想用多种文件类型运行find-name。 例如

这可能吗

$ find . -name '*.h' -o -name '*.cpp'
要在
man
页面中查找此信息,请键入
man find
,然后通过键入
/operators
搜索运算符,然后按enter键

对于GNU-find不是严格必需的,但是在Unix中是必需的。在这两种情况下,引号都很重要,如果这些类型的文件出现在当前目录中,省略引号将导致错误

在某些系统(如Cygwin)上,圆括号是使扩展集包含在内所必需的:

$ find . \( -name '*.h' -o -name '*.cpp' \)
对我有用。

我就是这么用的

find . \( -name "*.h" -o -name "*.cpp" \) -print
用于搜索文件

find . \( -name '*.h' -o -name '*.cc' \)`
用于对其执行命令

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

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

find-E-iregex“*\(js | jsx | html | htm)”

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

有关带有测试用例的正则表达式的解释,请查看:

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


这是针对BSD
find
(Mac OSX 10.10.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)'

括号应该是不必要的,但是引用
*.h
*.cpp
可能是必要的。因为OP提到UNIX,所以“.”是绝对必要的。GNU find不需要我的Cygwin,如果我使用Eric的示例,它运行良好。但是如果我在末尾添加“-print”,它只使用姓氏过滤器。当我添加括号时,它与-print选项一起工作。Joachim我想这对你来说可能是一样的。对于我来说,在Ubuntu上,当我想要它被传送到xargs时,括号似乎是必要的。如果没有它,它仍将运行,但只使用我提到的最后一个扩展。@Priyal
-o
是“或”有趣的,我不知道您可以使用
-or
,我只看到了
-o
。工作正常,易于记忆。请注意,并非所有版本的
find
(例如Solaris上的此处)都支持
-或
而不是
-o
,除非您认为添加
-print
是新的有用信息,最好是对现有答案中的一个进行更新投票,而不是增加重复。这些偏执论点很重要。很有趣。。。你的解决方案对我有用。。。如果我不使用括号,它将失败,只找到第二种类型的文件+1.事实证明,这个问题以前被问过。。。对于
*.h
*.cpp
的相同示例!感谢上一个示例,当您将
\(…\)
传递给例如
xargs
时,并不明显需要
\(…\)
。如果没有大括号,该命令始终仅在最后一个扩展上执行。
find . \( -name '*.h' -o -name '*.cc' \)`
find . \( -name '*.h' -o -name '*.cc' \) -exec egrep "#include" {} \; -print | egrep "^\."
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)'
find ./ -name *.csv -o \\-name *.txt|xargs grep -i new