さまざまな画像ファイル名のバリエーションを含むフォルダーを検索しようとしています。
_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"
を実行しても結果は返されません。
私は混乱しています!
ここにはいくつかの問題があります。まず、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 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 findにアクセスできませんが、これは機能するはずです。
find -E . -regex '.*[0-9]{2,4}x[0-9]{2,4}\.jpg'