本サイト/記事は移転しました。

約10秒後にリダイレクトします。

シェルスクリプトで画像をリサイズ改造

 シェルスクリプトで画像をリサイズの続き。リサイズ後のファイルも同じタイムスタンプ(更新時刻)になるように。

#!/usr/bin/zsh
size=`zenity --entry --title=画像サイズを指定 --entry-text=640 --text=長辺のピクセル数を入力`
if [ $? -eq 0 ] ;then
	if [[ $size =~ "[^0-9]" ]] 
	then
		zenity --info --text=数字を指定
	else
		for fullpath in $*
		do
			filename=${fullpath##*/}
			basename=${filename%.*}
			dirname=${fullpath%/*}
			extension=${fullpath##*.}
			newfilename=${size}_$basename.`echo $extension | tr "[A-Z]" "[a-z]"`
			chdir $dirname
			filetime=`ls -l $filename | sed 's/ +/ /g' \
			| cut --delimiter=' ' -f6-7 | sed 's/[-: ]//g'`
			convert $filename -geometry ${size}\x${size} $newfilename
			touch -t $filetime $newfilename
		done
	fi
else
	zenity --info --text=キャンセルされました。 
fi

 ファイルのタイムスタンプを表示するコマンドはないようなので、参考書を見ながら多段パイプで対応。

Linuxシェルスクリプトユーザー便利帳 (QUICK MASTER 16)

Linuxシェルスクリプトユーザー便利帳 (QUICK MASTER 16)

 touchコマンドの−tオプションに渡す文字列のフォーマットの「.」の部分が見えにくかったんで、「12桁やったらtouchコマンドはどう解釈するんや」と悩んだ。