2014-01-07 53 views
0

我有一個像比賽數量的可變長度的shell腳本

  • _1_blabla.sql
  • _35_description.sql
  • _148_last_migration.sql
  • structure.sql文件

如何我是否以_variableLengthOfDigit_randomString.sql開頭匹配這些文件。

到目前爲止,我有類似

find . -name '_[0-9]_*.sql' 

但它只會在第一種情況相匹配。

回答

4

使用-regex選項find

find . -regex '.*/_[0-9]+_.*\.sql' 

或者,使用bash的擴展通配:

shopt -s extglob 
echo _+([0-9])_*.sql  
1

使用發現你可以使用正則表達式

find . -regex '.*_[0-9]*_.*\.sql$' 
0

如果使用grep您可以使用正則表達式:

find . | grep '^_[0-9]*_.*\.sql$' 

find-name無法比擬的模式一樣的單純模式匹配你所描述的一個。

您也可以使用現代find命令的選項-regex

+0

的grep是完全沒有必要的,因爲在這裏找到了正則表達式的能力。 – anubhava

+1

不是每個'發現'。 – Alfe

+1

'find'的POSIX版本不適合管道,因爲它沒有'-print0'。 – chepner