正規表現パターンに一致するファイルの移動

正規表現パターンに一致するファイルの移動

何千ものファイルを含むディレクトリがあります。これらの多くは、ファイル名が画像解像度で始まる画像です。画像の高さと幅は、2桁、3桁、4桁、または5桁です。たとえば、

 - 986x1088_lalbslj.jpg
 - 2043x924_fjnndkk.jpg
 - 9560x12643_fjknfd.jpg
 - 24x24_dnjkan.jpg

これらすべての画像を新しいディレクトリ(たとえば./images/)に収集したいと思います。簡単に聞こえますね。
単純な正規表現は[0-9]+x[0-9]+.*これらのファイル名と一致しますが、私が知っている限り、正規表現を組み合わせることはできませんmv
理想的には、次のことがうまくいきたいのですが、もちろんmv [0-9]+x[0-9]+.* imagesそうではありません。

この質問は以前に何度も要求されたようです。この質問と他のStackExchangeの同様のスレッドを数十(文字通り!)見てみましたが、残念ながらまだ役に立つ答えを見ていませんでした。ほとんどの場合、許可された答えは単にmv正規表現の代わりにglobを使用する方法を説明したり、作成者を助けるためにそのglobを提案しますが、私の場合はうまくいきませんでした.だから私は私の運を試してみたかったと私自身に質問を投げたかった。よろしくお願いします。

私のパターンを合理的なグローブに圧縮することはできず、正規表現が機能しないようです。mvそれではどうすればいいですか?
当然、このようなことは可能ではないでしょうか?

情熱的な答えは本当にありがとう!

答え1

あなたはそれを使用することができます拡張グローバル:

extglob組み込みオプションを使用してシェルオプションを有効にすると、複数の拡張パターン一致演算shopt子が認識されます。以下の説明では、パターンリスト""で区切られた1つ以上のパターンのリスト|。複合パターンは、次のサブパターンのうちの1つ以上を使用して形成できます。[...]

+(pattern-list)
与えられたパターンと1つ以上一致します。

だから:

shopt -s extglob
mv +([0-9])x+([0-9])* ./images

答え2

次のループを使用して目標を達成できます。

for i in *
do
    echo "$i" | grep -qE "^[[:digit:]]+x[[:digit:]]+.*" && mv "$i" images
done

次のように正規表現を変更して、2〜5桁の数字を指定できます。

for i in *
do
    echo "$i" | grep -qE "^[[:digit:]]{2,5}x[[:digit:]]{2,5}.*" && mv "$i" images
done

答え3

mv $(ls | grep YOUR_REGEX) ターゲットディレクトリ/

問題を解決しなければならない

乾杯

関連情報