我想找到给定根目录中包含文件名中任意扩展名的任何文件。 我看到这篇文章: How to delete all files with certain suffix before file extension
基于这些信息,我尝试了这个:
find . -iregex ".*\.\(wav\|aif\|wave\|aiff\)"
这似乎应该工作,但我没有将任何结果打印到终端窗口。
有人可以提供建议吗?我在OSX 10.7上
谢谢, JML
答案 0 :(得分:5)
您正在寻找:
find . -regex ".*\.\(wav\|aif\|wave\|aiff\)"
您错过了转义,\
,或|
上的字符,运算符
答案 1 :(得分:2)
这是emacs
样式的正则表达式吗?
如果没有,请尝试使用-regextype
。从Linux上的find
手册页(古代):
-regextype type
更改稍后在命令行上发生的-regex
和-iregex
测试所理解的正则表达式语法。目前实施的类型为emacs
(这是默认值),posix-awk
,posix-basic
,posix-egrep
和posix-extended
。
在MacOS X上,find
的手册页显示:
-iregex pattern
与
-regex
类似,但匹配不区分大小写。
-regex pattern
如果文件的整个路径与使用正则表达式的模式匹配,则为true。要匹配名为“
./foo/xyzzy
”的文件,您可以使用正则表达式“.*/[xyz]*
”或“.*/foo/.*
”,但不能使用“xyzzy
”或“{{1}” }”。
一些实验表明:
/foo/
在我的文件夹中找到了很多PDF文件,但这些变体都找不到任何内容:
find pdf -iregex ".*/.*.pdf"
因此,人们不得不假设MacOS X(BSD)find pdf -iregex ".*/.*\.(pdf|doc|docx)"
find pdf -iregex ".*/.*\.\(pdf|doc|docx\)"
find pdf -iregex ".*/.*.(pdf|doc|docx)"
find pdf -iregex ".*/.*.\(pdf|doc|docx\)"
支持的正则表达式不包括已识别字符之间的交替(括号和管道)。 “遗憾的是:find
暗示它可能,但事实并非如此。似乎MacOS X(BSD)不支持man 7 re_format
选项。
因此,最简单的方法是安装GNU -regextype
,或者对N个不同的文件扩展名进行N次单独搜索,或者一般搜索文件并使用find
来捕获文件你感兴趣的是。假设你不在文件名中使用换行符(空格等都可以,但换行符不行)。