2014-12-29 178 views
0
  • 這工作得很好:find . -name "skr[0-9][0-9][0-9][0-9][0-9].rtf" -type f的Linux/Unix查找命令

  • 這不起作用:find . -name "skr[0-9]{5}.rtf" -type f

任何人都可以請解釋一下,給我類似命令的第二個版本的東西。

+0

沒有一個'find'命令。你的意思是特指GNU'find'? – 0xC0000022L

+0

是的,對不起,我應該提到.. –

回答

2

{5}是從擴展正則表達式語法不從殼通配符。它不適用於-name

您可以使用-regex而不是-name以及一些查找版本(GNU)。在這種情況下,您的模式必須匹配整個路徑,請注意*?.,因爲它們在正則表達式中具有不同的含義。

重複計數語法是「擴展」 RE的一部分,所以你需要使用-E(與它實際上支持它的發現變種):

find -E . -regex '.+/skr[0-9]{5}\.rtf' -type f 

在Mac上,您需要安裝GNU findtools如果您希望這樣的安慰:

brew install findutils --default-names 

在某些系統上,你可以嘗試gfind代替find

+0

你能否建議一些類似於第二版的命令? –

+0

你能解釋一下-regex在這個例子中的用法,我是linux命令的新手,這就是爲什麼要問。 –

+0

@ user2132128那麼,作爲一個新手,最好忘記RE :)我添加了一個有效的例子,因爲你可以看到它並不像你最初的正確版本那麼短,所以不要打擾...(如果你很好奇檢查一個正則表達式教程,並記住「。+ /」的意思是「一個或多個以斜槓結尾的字符。 – eckes