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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 使用find命令查找特定的文件扩展名_Unix_Find_Bsd - Fatal编程技术网

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
选项


因此,安装GNU
find
,或者对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
选项

因此,安装GNU
find
,或者对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。怎么了?