【问题标题】:How to find files with regex and list them?如何使用正则表达式查找文件并列出它们?
【发布时间】:2014-12-05 22:35:28
【问题描述】:

我是整个命令行的新手,并试图弄清楚如何通过正则表达式在当前目录及其子目录中搜索具有特定文件名的文件。然后我想在我的命令行中列出这些文件。

正则表达式应该匹配如下文件:

B2ctes_UCUAAwF-K-large-123x322-132x423.jpg
this_is-a-123-file_name-3124x2445-4235x32.jpeg
file-32x32-64x64.png

重要的部分是-[number]x[number]-[number]x[number]

我的尝试如下所示:

find . -type f -regex ".+?-\d+x\d+-\d+x\d+\.\w{3,4}" -ls;

这样做有两个问题:

  1. -ls puts 显示了很多信息。我只想要文件名。
  2. 正则表达式不起作用。我曾尝试使用.+,但即使这样也不会返回任何内容。

【问题讨论】:

    标签: regex command-line


    【解决方案1】:

    您可以将此findregex 一起使用:

    find . -regextype posix-extended -type f -regex ".*-[[:digit:]]+x[[:digit:]]+-[[:digit:]]+x[[:digit:]]+\.[[:alnum:]]{3,4}"
    

    或者在 OSX 上:

    find -E . -type f -regex ".*-[[:digit:]]+x[[:digit:]]+-[[:digit:]]+x[[:digit:]]+\.[[:alnum:]]{3,4}"
    

    并且没有正则表达式

    find . -type f -name "*-[[:digit:]]*x[[:digit:]]*-[[:digit:]]*x[[:digit:]]*.[[:alnum:]]*"
    

    【讨论】:

    • 谢谢,我通过 ssh 在 linux 上尝试了第一个,在我的 OS X 机器上本地尝试了第二个。两者都按预期工作。
    【解决方案2】:

    那么简单:

    find . -type f -name '-[0-9]*x[0-9]*-[0-9]*x-[0-9]*'
    

    find . -type f  -regextype posix-egrep -regex '.*-[0-9]+x[0-9]+-[0-9]+x-[0-9]+.*'
    

    【讨论】:

    • 抱歉,我认为我的问题问得不够好。文件名部分是可变的。它也可能类似于“B2ctes_UCUAAwF-K-large”。扩展名可以是 .gif、.jpg、.jpeg 或 .png,数字始终是数字,但长度可变。我会改写我的问题。
    • 它们仍然不起作用。我不知道为什么……也许我不支持 posix 类型?!
    猜你喜欢
    • 1970-01-01
    • 2019-11-06
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2017-06-12
    • 2016-05-14
    相关资源
    最近更新 更多