web-dev-qa-db-ja.com

正規表現でmacOSターミナルで検索を使用する

さまざまな画像ファイル名のバリエーションを含むフォルダーを検索しようとしています。

_1_2-300x224.jpg
1_2-600x449.jpg
1_2-600x600.jpg
1_2-768x575.jpg
1_2-802x600.jpg
1_2.jpg
_

計画は、2〜4桁+ 'x' + 2〜4桁で終わるファイルを見つけて削除することです。この一致は、式.*(\d{2,4}x\d{2,4}).jpgを使用して Regexr で作成できます(この式は、_1_2.jpg_を除くすべてを強調表示します)。

ただし、find . -name ".*(\d{2,4}x\d{2,4}).jpg"を実行しても結果は返されません。

私は混乱しています!

2
minttoothpick

ここにはいくつかの問題があります。まず、Johnが述べたように、-nameはグロブとのサブ文字列マッチングを行うため、-regexを使用する必要があります。次に、正規表現の方言の非互換性があります。デフォルトではGNU findはEmacs正規表現を使用し、BSD findはposix-basic正規表現を使用します。find.infoがインストールされている場合は、ここで詳細を読むことができます。

info find.info 'Reference' 'Regular Expressions' 'emacs regular expression'

サポートされている正規表現の方言は、次の場所にあります。

info find.info 'Reference' 'Regular Expressions'

GNU検索

GNU find:を使用して、次のようにposix-extendedで式を機能させることができます。

find . -regextype posix-extended -regex '.*[0-9]{2,4}x[0-9]{2,4}.jpg'

出力:

./1_2-600x600.jpg
./1_2-802x600.jpg
./1_2-600x449.jpg
./1_2-300x224.jpg
./1_2-768x575.jpg

BSD検索

BSD findにアクセスできませんが、これは機能するはずです。

find -E . -regex '.*[0-9]{2,4}x[0-9]{2,4}\.jpg'
2
Thor