検索と正規表現

検索と正規表現

このfind式で私が何を間違えましたか?

; touch ook ooks
; find . -name 'ook' -or -name 'ooks' -type f
./ook
./ooks
; find . -name 'ook[s]?' -type f      
[returns nothing]
; echo $?
0

答え1

正規表現とシェル検索パターンを混同しています。

?シェルの単一文字を表します。

?正規表現では、前の文字(または子パターン)がオプションであることを示します。

努力する:

find . -regex '.*ooks?' -type f

検索マニュアルページから:

       -正規表現パターン
              ファイル名が正規表現パターンと一致します。これはゲームです
              検索する代わりにフルパスを使用してください。たとえば、ファイルを一致させるには
              「./fubar3」という名前の正規表現「.*bar」を使用できます。または
              '.*b.*3' ですが、'f.*r3' ではありません。正規表現の理解
              find のデフォルトは Emacs 正規表現ですが、動作します。
              これを変更するには、-regextype オプションを使用します。

答え2

この回答は少なくともGNU検索に適用されます。

-nameマッチングにシェルパターンを使用します。正規表現の一致を実行するには、次のようにします-regex

 find . -regex '.*ook[s]?' -type f

-regexフルパスを一致させるには、emacs正規表現を使用します。正規表現の種類は変更されることがあります-regextype

関連情報