2016-07-26 57 views
1

当我运行下面的命令,我得到的文件列表找到数值超过指定数量更大的文件

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 

现在,我在文件中具有大于或等于数字只关心我怎样才能完成这件事?

预先感谢您。

回答

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 
+2

除非我失去了一些东西,我不认为这会找到'_010' ... – twalberg

+0

是的,你是对的@twalberg,它现在已经修复了 – anubhava

+0

@anubhava莫名其妙地在我的macbook上运行这些命令给我以下错误“find:-regextype:unknown primary or operator” – kirikoumath

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

只适用于数字部分。

+1

尽管代码通常不言自明,这是很好的补充一些解释你的代码。这会在审查队列中弹出,因为代码只是答案。 另外,请适用适当的格式。 – Will

+0

@会感谢您的通知 – beatrice

+1

尽管仅限代码答案,但请理解,这是一个问答社区,而不是众包的问题社区,而且通常,如果OP了解代码被发布为答案,他/她会自己想出一个类似的解决方案,并且首先不会提出问题。对于未来可能不熟悉所提供代码的读者,同样的原则也适用。因此,请通过解释* how *和/ or * why * it的作用,为您的答案和/或代码提供背景。 – XenoRo

0

使用此图案

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

Demo

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

但我不知道那真叫从效率的角度来看一个差...