Answers:
使用该-o
选项进行“或”操作。例如,这将列出.cpp
,.c
并且.h
文件:
find . -name \*.cpp -o -name \*.c -o -name \*.h
*
如果格式化为代码进行转义不再需要。完全忽略了这一点。:)
您将需要使用-o选项。例如,下面的语句在一个文件夹中找到所有png,jpg和gif文件。
find . \( -iname \*.png -o -iname \*.jpg -o -iname \*.gif \)
我使用-iname选项,以便匹配不区分大小写。
$ find /path/ -name '*.cpp' -or -name '*.c' -or -name '*.h'
“-或”表示我正在寻找两个集合中的一个。
我最近在这里写了一个使用布尔运算符查找的快速指南:http : //jamesfishwick.com/2012/linux-find-and-boolean-operators
尽管所有答案或多或少都是相同的,但我发现它们之间不能使用多个名称和布尔运算符来读取。
我认为这可能是更优雅的解决方案:
$ find . -type f | grep -E "\.java$|\.cpp$|\.c$"
让我们分手吧
find .
以递归方式查找当前路径中的所有文件(如果需要,可以更改为其他路径)-type f
仅将搜索范围缩小到文件(速度提升幅度不大,但仍然...)| grep -E
我用它来获得Mac OS X中使用FreeBSD grep的grep识别或(|
)运算符,而GNU grep则不需要(在文件中签入)。man
"\.java$|\.cpp$|\.c$"
正则表达式,其中包括它的文件名结尾用.java
,.cpp
和.c
(ADD那些你需要)然后,您可以通过管道传输结果列表以进行进一步处理,例如
$ find . -type f | grep -E "\.java$|\.cpp$|\.c$" | xargs sed -i '' $'/s/\r$//'
本示例删除CRLF
了OS X / Linux的DOS / Windows 行结尾LF
(这也是OS X sed
语法,请检查您的版本细节)。
采用
find path/to/dir -name "*.ext1" -o -name "*.ext2"
说明
find
会递归。-o
代表-or
。因此,以上表示搜索此通配符或此通配符。如果只有一种模式,则不需要-o
。
find
命令有关,因为这是您要搜索匹配文件的地方。