ブログ投稿用に、画像・動画ファイルの一括リネーム、画像の一括リサイズ・EXIF削除を行うBashスクリプト
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
#region usage | |
function usage { | |
cat <<EOF | |
$(basename ${0}) by.もち: | |
ブログ投稿用に、画像・動画ファイルの一括リネームを行うスクリプト。 | |
引数で指定したディレクトリの直下にあるファイルのみが対象。 | |
各メディアファイルに対して次の処理を行う。 | |
・リネーム前のファイルに対しては上書きなどせず、新たに "renamed" フォルダを作成してその中にリネーム後のファイルを保存する。 | |
・画像ファイルの場合は、一定のピクセルサイズ以内に収まるようにリサイズする。 | |
・画像ファイルの場合は、EXIF情報を削除する。 | |
Usage: | |
$(basename ${0}) <メディアファイルが保存してあるフォルダパス> | |
Options: | |
--help, -h このヘルプを表示する。 | |
EOF | |
} | |
#endregion | |
#region 引数処理 | |
case $1 in | |
--help | -h) | |
usage | |
exit 0 | |
;; | |
*) | |
# 引数で指定したディレクトリが存在しない場合 | |
if [ ! -d $1 ]; then | |
echo "ディレクトリが存在しません。" >&2 | |
exit 1 | |
fi | |
;; | |
esac | |
#endregion | |
#region 定数 | |
startDir=`pwd` | |
wDir=$1 | |
distDirName=renamed | |
imageExts=( | |
'jpg' | |
'jpeg' | |
'png' | |
'bmp' | |
'gif' | |
) | |
imageMaxSize="1024x768" | |
dateString=`date +%Y%m%d` | |
#endregion | |
#region 本チャンの処理 | |
cd $wDir | |
mkdir $distDirName | |
idx=0 | |
for file in `ls -F | grep -v /` | |
{ | |
((idx++)) | |
# 連番 | |
num=`printf %03d $idx` | |
# リネーム後のファイル名(拡張子除く) | |
basename=${dateString}_${num} | |
# 元のファイルから拡張子を小文字で取得する。 | |
ext=`echo $file | sed 's/^.*\.\([^\.]*\)$/\1/' | sed 's/.\+/\L\0/'` | |
# リネーム後のファイルのパス | |
outFile=./${distDirName}/${basename}.${ext} | |
# ファイルが静止画の場合 | |
if [[ $(printf '%s\n' "${imageExts[@]}" | grep -qx $ext; echo -n $?) -eq 0 ]]; then | |
# 画像をリサイズ・リネーム・EXIF削除する。 | |
convert -strip -resize $imageMaxSize $file $outFile | |
else | |
# ファイルをそのままリネームする。 | |
cp $file $outFile | |
fi | |
echo "$file -> ./${distDirName}/${basename}.${ext}" | |
} | |
#endregion | |
#region 終了処理 | |
# リネーム結果を表示する。 | |
echo "${idx}個のファイルがリネームされました。(画像ファイルについてはリサイズ・EXIF削除されました)" | |
cd $startDir | |
echo "fin." | |
exit 0 | |
#endregion |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment