画像をバッチサイズ変更するスクリプトを書いています。もともとは操作を適用していたのfor file in $(ls $1)
ですが、グロブを使えるようにしたいと思っているので、もっと似たようなものを探していfor file in $(echo $1)
ます。問題は、dotglobが有効になっている場合と有効になっていない場合があるため、echo *
隠しファイル(特に、.DS_Store)が返されconvert
、エラーが発生してスクリプトが停止する可能性があることです。コマンドのデフォルトの動作は、cd
画像でいっぱいのディレクトリに移動して実行すると、 dotglobが有効になっているかどうかに関係なく、隠しファイルを除くresize * 400x400 jpg
すべての画像のサイズが変更されるようにしたいと思います。
だから、擬似コードで、私は探しています:
for file in $(echo $1 | [filter-hidden-files])
これが古い振る舞いの私のスクリプトです。解決策が見つかったら、新しい動作で更新されます:
# !/bin/bash
# resize [folder] [sizeXxsizeY] [outputformat]
# if [outputformat] is omitted, the input file format is assumed
for file in $(ls $1)
do
IMGNAME=$(echo "$file" | cut -d'.' -f1)
if test -z $3
then
EXTENSION=$(echo "$file" | cut -d'.' -f2)
convert $1/$file -resize $2 -quality 100 $1/$IMGNAME-$2.$EXTENSION
echo "$file => $IMGNAME-$2.$EXTENSION"
else
convert $1/$file -resize $2 -quality 100 $1/$IMGNAME-$2.$3
echo "$file => $IMGNAME-$2.$3"
fi
done
現在のスクリプトは次のとおりです。
# !/bin/bash
# resize [pattern] [sizeXxsizeY] [outputformat]
# if [outputformat] is omitted, the input file format is assumed
for file in $(echo $1)
do
IMGNAME=$(echo "$file" | cut -d'.' -f1)
if test -z $3 && if test -f $3
then
EXTENSION=$(echo "$file" | cut -d'.' -f2)
convert $file -resize $2 -quality 100 $IMGNAME-$2.$EXTENSION
echo "$file => $IMGNAME-$2.$EXTENSION"
else
convert $file -resize $2 -quality 100 $IMGNAME-$2.$3
echo "$file => $IMGNAME-$2.$3"
fi
done
コマンドresize * 400x400
を指定すると、convertは.DS_Store(OSXシステム上のすべてのファイルに存在する隠しファイル)を処理できないため、エラーをスローします。非表示の画像を処理することは決してないので、自動的にフィルタリングしたいと思います。私はgrepまたはfindを使用してこれを実行しようとしていますが、まだ理解していません。
新しいスクリプトはここにあります:
for file in $(echo $1)
do