【问题标题】:find specific file extension with find command使用 find 命令查找特定的文件扩展名
【发布时间】:2012-02-11 19:54:42
【问题描述】:

我想在给定的根目录中查找文件名中包含任意扩展名的任何文件。 我看到了这个帖子: How to delete all files with certain suffix before file extension

根据这些信息,我尝试了这个:

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

这似乎应该工作,但我没有得到任何结果打印到终端窗口。

有人可以提供建议吗?我在 OSX 10.7 上

谢谢, jml

【问题讨论】:

    标签: unix find bsd


    【解决方案1】:

    您正在寻找:

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

    您缺少转义符 \ 或运算符 | 上的字符

    【讨论】:

    • 道歉-我实际上尝试了您的建议。我修改了我的问题。
    • 非正则表达式find 命令是否将输出打印到控制台?您可以尝试以下方法将正则表达式的职责传递给不同的实用程序:find . | grep -e ".*\.\(wav\|aif\)"
    • 那是完美的。谢谢...如何将其传递给实用程序以删除它们?
    • 只是find . | grep -e ".*\.(wav\|aif)" | rm 吗?
    • 嗯;当我运行它时,我得到“xargs:未终止的报价”。 :/ ...另一方面,我可以打印所有成功找到的文件,而无需通过管道传输到 xargs。怎么了?
    【解决方案2】:

    这是emacs 风格的正则表达式吗?

    如果没有,请尝试使用-regextype。来自 Linux 上的 find 手册页(过时):

    • -regextype type

      更改稍后在命令行上发生的-regex-iregex 测试所理解的正则表达式语法。当前实现的类型有emacs(这是默认值)、posix-awkposix-basicposix-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 暗示它可能,但它没有。 -regextype 选项似乎在 MacOS X (BSD) 上不受支持。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 2019-07-21
      • 1970-01-01
      相关资源
      最近更新 更多