Unix 使用find命令查找特定的文件扩展名
我想在给定根目录中查找文件名中包含任意扩展名的任何文件。 我看到这个帖子: 基于这些信息,我尝试了以下方法:Unix 使用find命令查找特定的文件扩展名,unix,find,bsd,Unix,Find,Bsd,我想在给定根目录中查找文件名中包含任意扩展名的任何文件。 我看到这个帖子: 基于这些信息,我尝试了以下方法: find . -iregex ".*\.\(wav\|aif\|wave\|aiff\)" 这似乎应该可以工作,但我没有得到任何结果打印到终端窗口 有人能提供建议吗?我在OSX 10.7上 谢谢, jml是emacs风格的正则表达式吗 如果没有,请尝试使用-regextype。从Linux上的查找手册页(古文版): -regextype类型 更改稍后在命令行上进行的-regex和-
find . -iregex ".*\.\(wav\|aif\|wave\|aiff\)"
这似乎应该可以工作,但我没有得到任何结果打印到终端窗口
有人能提供建议吗?我在OSX 10.7上
谢谢,
jml是
emacs
风格的正则表达式吗
如果没有,请尝试使用-regextype
。从Linux上的查找手册页(古文版):
-regextype类型
更改稍后在命令行上进行的-regex
和-iregex
测试所理解的正则表达式语法。当前实现的类型有emacs
(这是默认值)、posix awk
、posix basic
、posix egrep
和posix extended
在MacOS X上,查找的手册页面显示:
-iregex模式
类似于-regex
,但匹配不区分大小写
-regex模式
如果文件的整个路径与使用正则表达式的模式匹配,则为True。要匹配名为“/foo/xyzy
”的文件,可以使用正则表达式“*/[xyz]*
”或“*/foo/*
”,但不能使用“xyzy
”或“/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
支持的正则表达式不包括识别字符之间的交替(括号和管道)。”遗憾的是:man7re_格式
暗示它可能,但事实并非如此。似乎MacOS X(BSD)不支持-regextype
选项
因此,安装GNUfind
,或者对N个不同的文件扩展名进行N次单独搜索,或者对一般文件进行一次搜索,并使用egrep'\(aff | wave?| aiff)$”
捕获您感兴趣的文件可能是最简单的。而是假设在文件名中不使用换行符(空格等可以,但换行符不行)。这是emacs
风格的正则表达式吗
如果没有,请尝试使用-regextype
。从Linux上的查找手册页(古文版):
-regextype类型
更改稍后在命令行上进行的-regex
和-iregex
测试所理解的正则表达式语法。当前实现的类型有emacs
(这是默认值)、posix awk
、posix basic
、posix egrep
和posix extended
在MacOS X上,查找的手册页面显示:
-iregex模式
类似于-regex
,但匹配不区分大小写
-regex模式
如果文件的整个路径与使用正则表达式的模式匹配,则为True。要匹配名为“/foo/xyzy
”的文件,可以使用正则表达式“*/[xyz]*
”或“*/foo/*
”,但不能使用“xyzy
”或“/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
支持的正则表达式不包括识别字符之间的交替(括号和管道)。”遗憾的是:man7re_格式
暗示它可能,但事实并非如此。似乎MacOS X(BSD)不支持-regextype
选项
因此,安装GNUfind
,或者对N个不同的文件扩展名进行N次单独搜索,或者对一般文件进行一次搜索,并使用egrep'\(aff | wave?| aiff)$”
捕获您感兴趣的文件可能是最简单的。而是假设您在文件名中不使用换行符(空格等可以,但换行符不可以)。您正在查找:
find . -regex ".*\.\(wav\|aif\|wave\|aiff\)"
您缺少转义、\
、或上的字符、|
、您要查找的运算符:
find . -regex ".*\.\(wav\|aif\|wave\|aiff\)"
您错过了转义、\
、或上的字符、
、操作员道歉-我实际上尝试了您的建议。我修改了我的问题。非正则表达式find
命令是否将输出打印到控制台?您可以尝试以下方法将正则表达式职责传递给其他实用程序:find.|grep-e.“*\(wav\\ aif\)”
太完美了。谢谢我如何将其传递给实用程序以删除它们?是否只是find.|grep-e.“*\(wav\| aif)”| rm
?hm;当我运行此命令时,会得到“xargs:unterminated quote”:/。。。另一方面,我可以打印成功找到的所有文件,而无需通过管道传输到xargs。怎么了?抱歉-我已经试过你的建议了。我修改了我的问题。非正则表达式find
命令是否将输出打印到控制台?您可以尝试以下方法将正则表达式职责传递给其他实用程序:find.|grep-e.“*\(wav\\ aif\)”
太完美了。谢谢我如何将其传递给实用程序以删除它们?是否只是find.|grep-e.“*\(wav\| aif)”| rm
?hm;运行此项时,我得到“xargs:unterminated quote”:/。。。另一方面,我可以打印成功找到的所有文件,而无需通过管道传输到xargs。怎么了?