オプションを使用してfindの正しい使い方を知ることはできません-regex
。
たとえば、次の例があります。
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
/(GNU拡張子)は、ファイル名だけでなくフルパスの標準-iregex
一致と同じように機能します。-path
そのファイルを探したい場合名前(大道)2つの10進数で始まり、その後に10進数以外の数字が来てから終わる場合は、以下を.flac
ポータブルで実行できます。
find . -name '[0-9][0-9][!0-9]*.[fF][lL][aA][cC]'
一致するものがない01.flac
ため、一致しません。[!0-9]
代わりに、次のように書くことができます。
find . -name '[0-9][0-9][!0-9]*' -name '*.[fF][lL][aA][cC]'
正規表現の代わりにワイルドカードパターンを使用します。
GNUを使用するにfind
は-iregex
:
find . -regextype egrep -iregex '.*/[0-9]{2}[^0-9/][^/]*\.flac'
find . -regextype egrep -iregex '.*/[0-9]{2}([^0-9/][^/]*)?\.flac'
つまり、正規表現の残りの部分が拡張されないようにするため、2つの数字を最初に固定します/
。
答え2
@steeldriverが提案したように、正規表現は.*[0-9]{2}[^.]*\.flac
正しく機能します。