KBMJがZDnetで連載している記事を紹介します。コメントなどありましたらそちらでお願いします。
Rubyでどう書く?特別編:Matzからのお題 高倉利明(KBMJ)
まつもとゆきひろ氏と食事をした時に頂いたお題にKBMJの高倉利明氏が答える。テーマは「Rubyでメモリカード上の写真を指定フォルダに振り分ける」だ。
第6回のテーマは「Rubyでメモリカード上の写真を指定フォルダに振り分ける」です。
デジカメで撮りためたデータをPCにバックアップする際、大量の撮影データの振り分けが面倒です。
そこで今回はRubyスクリプトを使用してファイルを自動的に振り分けてみることにしました。
require 'parsedate'
require 'fileutils'
require 'find'
require 'rubygems'
require 'extexif'
# フォルダ指定
src = "/mnt/card/DCIM/100NECDT/"
dst = "/var/image/"
# ファイルリスト作成
list = []
Find.find(File.expand_path(src)) { |path|
if /.*(jpg|JPG|jpeg|JPG)\z/ =~ path
list << path
end
}
# 振り分け
list.sort.each { |path|
image = ExtExif.new(path)
foldername = image["MetadataDate"][0,10].split(/:/).join
folderpath = dst + foldername
Dir.mkdir(folderpath) unless File.exist?(folderpath)
FileUtils.cp(path, folderpath)
}
本処理は以下の流れで行っています。
今回はEXIFフォーマット取得のためにExtEXIFライブラリを使用しました。
今回は簡略化のため以下の処理を省いてあります。
実用に利するためには、このような点に注意すると良いと思います。
なお、今回のお題はbuilder編集部の昼食会で、Matzにお会いしたときにもらったお題です。ご協力ありがとうございました!