2012-01-16 112 views

回答

5

您正在寻找:

find . -regex ".*\.\(wav\|aif\|wave\|aiff\)" 

你失踪逃逸,\,人物上,或者|,运营商

+0

apologies-其实我试过你的建议。我修改了我的问题。 – jml 2012-01-17 07:57:23

+0

非正则表达式'find'命令是否输出到控制台?你可以尝试像下面这样将正则表达式的责任传递给另一个实用程序: 'find。 | grep -e“。* \。\(wav \ | aif \)”' – ajshower 2012-01-17 14:18:44

+0

这是完美的。谢谢......我如何将它传递给实用程序来删除它们? – jml 2012-01-17 22:58:08

2

是,一个emacs风格的正则表达式?如果不是,请尝试使用-regextype。在Linux(过时)的find手册页:

  • -regextype type

    更改由后来出现在命令行上-regex-iregex测试理解正则表达式语法。目前实施的类型是emacs(这是默认设置),posix-awk,posix-basic,posix-egrepposix-extended


在MacOS X,该手册页find说:

-iregex pattern

-regex,但比赛是不区分大小写。

-regex pattern

如果该文件的完整路径使用正则表达式匹配模式真。要匹配名为'./foo/xyzzy'的文件,可以使用正则表达式'.*/[xyz]*'或'.*/foo/.*',但不能使用'xyzzy'或'/foo/'。

一些实验表明:

find pdf -iregex ".*/.*.pdf" 

发现一大堆的PDF文件,我的文件夹中充斥其中的,但这些变异的发现了什么:

find pdf -iregex ".*/.*\.(pdf|doc|docx)" 
find pdf -iregex ".*/.*\.\(pdf|doc|docx\)" 
find pdf -iregex ".*/.*.(pdf|doc|docx)" 
find pdf -iregex ".*/.*.\(pdf|doc|docx\)" 

因此,一个被迫假定MacOS X(BSD)find支持的正则表达式在识别的字符中不包括替换(括号和管道)。 '可惜:man 7 re_format暗示可能,但事实并非如此。看起来,Mac OS X(BSD)不支持-regextype选项。

因此,安装GNU find或对N个不同文件扩展名执行N次单独搜索可能是最简单的,或者一般搜索一个文件并使用egrep '\.(aff|wave?|aiff)$'来捕获您感兴趣的文件。而是假定你不要在文件名中使用换行符(空格等都可以,但换行符不行)。

相关问题