複数の拡張プログラムの処理

複数の拡張プログラムの処理

再帰的な.jpgファイルを別のサイズに変換するスクリプトを作成しました。

echo $re
mkdir "$re"_tmp
for a in *.jpg ; do convert "$a" -resize $re "$re""_tmp/${a%.*} ["$re"].jpg" ; done

png、bmpなどのマルチ拡張サポートを統合したいです。より良い点は次のとおりです。

FILEFORMAT="jpg, JPG, png, PNG, bmp, BMP"

それを作るアイデアはありますか?

PS:re変数は新しいサイズ1024×768(または800×600など)です。

答え1

私が正しく理解した場合jpg

for a in *.{jpg,JPG,png,PNG,bmp,BMP}; do
  printf '%s\n' "$a"
  # do your stuff here
done

{...}bash 関数が呼び出されます。支柱の拡張

答え2

スペースで区切られた複数のGLOB式を使用できます。

for a in *.[jJ][pP][gG] \
         *.[jJ][pP][eE][gG] \
         *.[pP][nN][gG] \
         *.[bB][mM][pP]
do
    echo "$a" "$re/$a"
done

# or inline
for a in *.[jJ][pP][gG] *.[jJ][pP][eE][gG] *.[pP][nN][gG] *.[bB][mM][pP] ; do echo "$a" "$re/$a"; done

POSIX規格かどうかはわかりませんが、そうだと思います。

答え3

これはPOSIXの苦情のバリエーションです。

for a in *.jp* *.JP*; do
  [ -f "$a" ] || continue
  echo "Processing $a"
done
  1. POSIXでは、スペースで区切られた複数のGLOBを配置できます。
  2. 実際の拡張子は小文字jpgまたは大文字のetherJPGですが、大文字と小文字を混在させることはできません。
  3. ファイルがない場合、JPGglobは拡張されず、varaの値はです*.JP*。 hteファイルがあることを確認してフィルタリングする必要があります。[ -f "$a" ]

関連情報