我無法弄清楚 find with -regex
option 的正確用法:
例如,給出以下範例:
Morcheeba/Big Calm/02 Shoulder Holster.flac
Morcheeba/Big Calm/02. Shoulder Holster.flac
我只想匹配表單中的字串path/to/file/## filename.ext
,不帶點。
我嘗試過:
find Morcheeba/ -regextype egrep -iregex ".*[0-9]{2}*[a-z]*flac$"
和一些變化,但我總是得到所有文件或沒有。
怎麼了?
提前致謝。
答案1
請注意,-regex
/ -iregex
(GNU 副檔名)就像完整路徑上的標準-path
匹配,而不僅僅是文件名。
如果你想查找其文件姓名(相對於小路) 以 2 位十進制數字開頭,後面跟著不是十進制數字的內容並以 結尾.flac
,您可以便攜式地執行以下操作:
find . -name '[0-9][0-9][!0-9]*.[fF][lL][aA][cC]'
請注意,它不會匹配 on01.flac
因為[!0-9]
在那裡無法匹配。相反,你可以這樣寫:
find . -name '[0-9][0-9][!0-9]*' -name '*.[fF][lL][aA][cC]'
它們使用通配符模式,而不是正規表示式。
要使用 GNUfind
的-iregex
,等價物是:
find . -regextype egrep -iregex '.*/[0-9]{2}[^0-9/][^/]*\.flac'
find . -regextype egrep -iregex '.*/[0-9]{2}([^0-9/][^/]*)?\.flac'
也就是說,我們將兩個數字錨定在開頭,因為我們確保正規表示式的其餘部分不會跨越/
.
答案2
正如 @steeldriver 所建議的,正規表示式.*[0-9]{2}[^.]*\.flac
運作正常。