自分が撮影した写真だとこれでいいんですが、自炊した画像データをデバイスに流しこんで見るときはとても不便です。
一応ソートの順番を「古い順」や「名前順」に変更できるのですが、アプリはこの設定を覚えてくれないようで、再度ギャラリーを見るとまた新しい順にソートされて表示されます。
なんとかしてギャラリーを開いた時に意図した並び順になるようにしたい。
という事で、連番のファイルに降順のタイムスタンプをつけるプログラムをシェルスクリプトで書いてみることにします。
■シェルスクリプト
#!/bin/sh上のシェルスクリプトをファイルに保存し、引数に連番の画像が含まれるディレクトリを指定します。
target=${1}
if [ -z ${target} ]
then
echo 'Target is not specified, operation aborted.'
exit
fi
if [ ! -d ${target} ]
then
echo 'Target is not a directory, operation aborted.'
exit
fi
timestump=`date +%s`
find ${target} -type f -print | sort -r | while read file
do
if [ `uname` = 'FreeBSD' ]
then
date=`date -r ${timestump} "+%Y%m%d%H%M.%S"`
elif [ `uname` = 'Linux' ]
then
date=`date +%Y%m%d%H%M.%S --date "@${timestump}"`
fi
touch -t ${date} ${target}${file}
timestump=`expr ${timestump} + 2`
done
本当はFreeBSDとLinuxで同じ記述にしたかったのですが、dateの使い方が双方のOSで激しく違う為、unameの戻り値で場合分けしています。
やっていることはシンプルで、現在のUNIXTIMEを取得し、そこからファイル名の昇順に2秒ずつ足したタイムスタンプを設定していくだけ。
ちなみに、なぜ2秒なのかというと、SDカードのファイルシステムであるFAT32が、奇数秒のタイムスタンプを許容しない為です。
FAT32では、タイムスタンプに奇数秒の指定をすると、偶数に丸められてしまう(-1秒される)らしい。
0 件のコメント:
コメントを投稿