查找数值大于指定数字的文件

时间:2016-07-26 20:03:41

标签: regex find ls

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

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的文件感兴趣。我怎样才能完成这项工作?

提前谢谢。

4 个答案:

答案 0 :(得分:2)

-regex中使用find选项,您可以调整正则表达式,以便在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

答案 1 :(得分:0)

00[3-9]|(([1-9]\\d\\d)|(\\d[1-9]\\d))

仅适用于数字部分。

答案 2 :(得分:0)

使用此模式

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

Demo

答案 3 :(得分:0)

尽管我喜欢在可能的情况下使用单个命令,但我想也许这就是你需要的:

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 }'

但我不确定它从效率的角度来看确实有所不同......