「車輪の再発明」にはなるけど、ファイルの日付を当てにして
ファイル名をyyyy-mm-dd-n.jpgに変更して、ついでに
画像のサイズを176x144に変換して、指定のディレクトリに
納める、というスクリプトを書いた。
ImageMagickがインストールされていたらconvertで、画像サイズを
176x144に変換してくれます。
http://nais.to/~yto/tools/file2date/にもあるのは分かっていましたが、まぁ 勉強のつもりで。
#!/usr/bin/ruby
# file name: datefilename
# first date: 2005 03 01
# function: chenging file name from date
# Usage: datefilename [file name] [directory]
# Ex: P1001000.JPG -> 2006-03-09-1.jpg
require "fileutils" # fileutilsライブラリを使用する
# 変数初期化
debug = false
$im_conv="convert"
$size="-resize 176x144"
$create_date = Time.new
$new_file_name = Array.new
$src_file_name = Array.new
$fcnt = 0
$stamp = Time.new
$seq_num = 0
# 日付ファイル名を配列に入れる
ARGV.each do |a_file|
# 指定されたPATH(ファイル名含む)がファイルであることを確認
if(FileTest.file?(a_file)) then
# ファイルの更新時間を取得
$create_date = File.mtime(a_file)
# 同じ日付のファイルがあったら連番をふる
if($create_date.strftime("%x") == $stamp.strftime("%x")) then $seq_num+=1
else $seq_num = 1 end
$stamp = $create_date
# 日付からファイル名を取得
$src_file_name << a_file
$new_file_name << sprintf("%s-%d.jpg",$create_date.strftime("%Y-%m-%d"),$seq_num)
print $src_file_name[$fcnt]," -> " if(debug)
print $new_file_name[$fcnt],"\n" if(debug)
$fcnt+=1
elsif(FileTest.directory?(a_file)) then
# ディレクトリだったら、ディレクトリ変数に格納
$dir = a_file
print "directory : ",a_file,"\n" if(debug)
end
end
# 日付ファイル名にして、ファイルをコピー
$cnt = 0
while ($cnt < $fcnt) do
print $cnt,":",$fcnt,"\n" if(debug)
# ImageMagicのconvertを使って、画像の大きさを176x144にする
system(sprintf("%s %s %s %s",$im_conv,$size,$src_file_name[$cnt],$new_file_name[$cnt]))
# ファイルコピー
FileUtils.mv($new_file_name[$cnt],$dir)
print "convert ",$src_file_name[$cnt]," -> ",$dir,$new_file_name[$cnt],"\n"
$cnt+=1
end
printf("copy %d files\n",$fcnt)
# おわり
拡張子のチェックや、本当にそれが画像ファイルなのかのチェックもしていま せんが、自分専用ということで。
解決したかったのは、画像のファイル名、サイズ、勝手にコピーをしてくれた
らな、と思って。
たぶん、日付のあたりだけをなんとかすれば、shell scriptでもよい気がして
来た。