exifrを使ってデジカメの画像をリネーム
JPEGファイルのEXIF情報を取得するライブラリ「exifr」を使って,デジカメ画像のファイル名をリネームするスクリプトを書いてみました。
まずはexifrのインストール
> gem install exifr
#!ruby -Ks $KCODE='s' require 'exifr' # Timeから新しいファイル名(拡張子除く)を生成 def file_spec(tm) '%04d%02d%02d_%02d%02d%02d' % tm.to_a[0,6].reverse end # 重複しないファイル名を生成 def no_overlaps(path) tmp = path d = File.dirname(tmp) ext = File.extname(tmp) fs = File.basename(tmp, ext) i = 2 while File.exist?(tmp) tmp = File.join(d, "#{fs}_#{i}#{ext}") i += 1 end tmp end # 新しいファイル名を生成 def new_file_name(old_path, tm) new_spec = file_spec(tm) new_name = new_spec + File.extname(old_path) new_path = File.join(FilePath, new_name) no_overlaps(new_path) end # ファイル名を変更 def ren_exec(path) tm = case File.extname(path) when /\.jpe?g/i # JPEGの場合はEXIFの日時 tags = EXIFR::JPEG.new(path) tags.exif[:date_time] when /\.avi/i # AVIの場合はファイルの更新日時 File.mtime(path) end new_path = new_file_name(path, tm) puts "#{File.basename(new_path)} <- #{File.basename(path)}" File.rename path, new_path end # 実行 FilePath = File.expand_path(ARGV[0] || '.') pattern = "%s/*.jpg\0%s/*.jpeg\0%s/*.avi" % [FilePath, FilePath, FilePath] Dir.glob(pattern) do |path| ren_exec path end
実行
> ruby rename.rb C:\tmp