複数ファイルのBash実行スクリプト

複数ファイルのBash実行スクリプト

ImageMagickでコマンドを実行する単純なbashスクリプトがあります。画像(INFILE - 通常は.tif)を取得してサイズを変更し、結果を保存します(OUTFILE - 通常は.jpg)。

INFILE=/path/'image name.tif'
OUTFILE=/path/'image name.jpg'

echo INFILE="${INFILE}" OUTFILE="${OUTFILE}" 

magick -quiet "${INFILE}" \
  -filter LanczosRadius \
  -distort resize 1600 \
  -quality 92 \
  "${OUTFILE}"

スクリプト名はMagic-Resize.shです。

このスクリプトを使用して複数の画像を一括処理したいと思います。つまり、複数のINFILESで実行したいのです。例えば。フォルダに100個のイメージがある場合は、各イメージがスクリプトによって一度処理され、各イメージに固有のOUTFILEを作成したいと思います。

私は初めてバッシュに触れました。私は次のようにクラックしました。

INSCRIPT=/path/Magick-Resize.sh

echo INSCRIPT="${INSCRIPT}"

for INFILE in *.tif; do
    if [[ "$INFILE" = *-tagged.tif ]]; then
        continue # skip output
    fi
    name=$(basename "$INFILE")-tagged.jpg
    echo name="${name}"
    "${INSCRIPT}" "$INFILE" > "${name}"
done

ただし、2 つの .tif イメージを含むテスト フォルダーでは、ファイル名 "*.jpg" のイメージのみが出力されます。

誰でもソリューションを提供できますか?

私はミント20.3を使用しています。

ベストアンサー1

スクリプトにはパラメータがなく、INFILE名とOUTFILE名がハードコードされています。

zshここでは代わりに を使用し、bash次のようにします。

transform()
  magick -quiet $1 \
   -filter LanczosRadius \
   -distort resize 1600 \
   -quality 92 \
   $2

autoload -Uz zmv
zmv -P transform './(^*-tagged).tif' './$1-tagged.jpg'

おすすめ記事