【问题标题】:find file with numeric values greater than a specified number查找数值大于指定数字的文件
【发布时间】:2016-11-30 15:15:56
【问题描述】:

当我运行以下命令时,我会得到一个文件列表

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

./prefix_duplicate_001.txt 

./prefix_duplicate_002.txt 

./prefix_duplicate_003.txt 

./prefix_duplicate_004.txt 

./prefix_duplicate_005.txt

现在我只对数字大于或等于 003 的文件感兴趣。我该如何完成这项工作?

提前谢谢你。

【问题讨论】:

    标签: regex find ls


    【解决方案1】:

    使用find 中的-regex 选项,您可以调整正则表达式以获取3_duplicate_ 之后具有前导零的更高值的所有文件:

    find . -regextype posix-extended -type f \
           -regex '.*_duplicate_0*([3-9]|[1-9][0-9])[0-9]*\.txt'
    

    在 OSX 上使用 find:

    find -E . -type f -regex '.*_duplicate_0*([3-9]|[1-9][0-9])[0-9]*\.txt'
    
    ./prefix_duplicate_003.txt
    ./prefix_duplicate_004.txt
    ./prefix_duplicate_005.txt
    

    【讨论】:

    • @anubhava 在我的 macbook 上以某种方式运行这些命令给了我以下错误“find: -regextype: unknown primary or operator”
    【解决方案2】:

    使用这种模式

    .*_duplicate_(?!00[1-2])\d{3}\.txt
    

    Demo

    【讨论】:

      【解决方案3】:

      尽管我喜欢在可能的情况下使用单个命令,但我认为这可能就是您需要的:

      find . -type f -name '*_duplicate_[0-9]*.mat' | awk -F '[_.]' '$4 > 3 { print $0 }'
      

      对此有一些变化 - 例如,这个:

      find . -type f -name "*.mat" | awk -F '[_.]' '$0 ~ /_duplicate_[0-9]*.mat/ && $4 > 3 { print $0 }'
      

      但我不确定从效率的角度来看它是否真的有所作为......

      【讨论】:

        【解决方案4】:
        00[3-9]|(([1-9]\\d\\d)|(\\d[1-9]\\d))
        

        仅适用于数字部分。

        【讨论】:

        • 虽然代码通常不言自明,但最好在代码中添加一些解释。这会出现在审查队列中,因为只有代码的答案往往如此。另外,请应用正确的格式。
        • 虽然不禁止仅使用代码的答案,但请理解这是一个问答社区,而不是众包社区,并且通常,如果 OP 理解作为答案发布的代码,他/她会自己想出一个类似的解决方案,并且不会一开始就发布问题。同样的原则进一步适用于任何可能不熟悉所呈现代码的未来读者。因此,请通过解释如何和/或为什么起作用,为您的答案和/或代码提供上下文。
        猜你喜欢
        • 1970-01-01
        • 2015-05-30
        • 1970-01-01
        • 2019-12-18
        • 2014-02-19
        • 2018-11-14
        • 1970-01-01
        • 2013-09-19
        • 1970-01-01
        相关资源
        最近更新 更多