Rubyでどう書く?特別編:Matzからのお題
高倉利明(KBMJ)
2008/08/06 20:59
まつもとゆきひろ氏と食事をした時に頂いたお題にKBMJの高倉利明氏が答える。テーマは「Rubyでメモリカード上の写真を指定フォルダに振り分ける」だ。
問題
まつもとゆきひろ氏
第6回のテーマは「Rubyでメモリカード上の写真を指定フォルダに振り分ける」です。
デジカメで撮りためたデータをPCにバックアップする際、大量の撮影データの振り分けが面倒です。
そこで今回はRubyスクリプトを使用してファイルを自動的に振り分けてみることにしました。
仕様
- 格納元フォルダ以下から画像データを抽出し、格納先フォルダに日付「yymmdd」ごとに振り分ける
- 画像データかどうかは拡張子「jpg, JPG, jpeg, JPEG」で判定
- 日付はEXIFの「MetadataDate」の日付を利用
回答例
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データから日付取得
- 日付のフォルダを作成
- 日付フォルダにファイルコピー
今回はEXIFフォーマット取得のためにExtEXIFライブラリを使用しました。
最後に
今回は簡略化のため以下の処理を省いてあります。
- 画像ファイルのバイナリファイル形式確認
- EXIFから取り出した日付フォーマット確認
実用に利するためには、このような点に注意すると良いと思います。
なお、今回のお題はbuilder編集部の昼食会で、Matzにお会いしたときにもらったお題です。ご協力ありがとうございました!
- 特集: Rubyでどう書く? (7件)
米フォレスター・リサーチ社 シニアアナリスト Jeremiah K.Owyang氏を迎え、同氏が提唱するソーシャルテクノロジーを効果的に活用方法するための方法『POST』を日本で初めて紹介する注目のリアルイベント
- 今日のトップ記事
- 3日前
- 4日前
- 5日前
- 6日前
- 7日前
- ホワイトペーパー
- 話題のタグ
UI
Flash
プロジェクト管理
server
入門
Firefox
Apple
iPhone
Firefox 3
Windows
ソフトウェア開発
モバイル
デザイン
Internet Explorer
Tips
レビュー
Webデザイン
Linux
Google
SOA
iPod touch
Webアプリケーション開発
ブラウザ
リファレンス
Adobe
PHP
携帯電話機
Mozilla
CSS
脆弱性
RIA
データベース
Safari
Webサービス
iPhone 3G
開発環境
オープンソース
JavaScript
Java
小技
仮想化ソフトウェア
Off Topic
Ajax
ユーザーインタフェース
Mac OS X
Python
HTML
Database
仮想化
プログラミング言語
話題のタグを見る »
ソーシャルテクノロジーをビジネスに利用する
iPhoneでQRコードの読み取りを試す、しかし
Oracle VM Managerで仮想マシンを動かす
グルジアに渡ったカメラマンの全記録--大国に翻弄される人々の息遣い
iPod touchで音声通話が可能に--Fringを早速試す
Mozilla Labs、Firefoxで地理情報を認識活用できるプラグイン「Geode」を正式発表
DelphiのパフォーマンスをDelphiで改善:エンバカデロの製品戦略
社内政治を生き抜くための教訓10箇条
iPhoneでVoIP--Fringを早速試す
Firefox 3のブックマーク構造を理解しよう
エンタメCGM「gooメーカー☆メーカー」
ERPパッケージの導入を成功させるコツ
ZDNet Japan Green IT
グリーンITの第一歩は見える化です
Techno Exchange
これからの時代のセキュリティ対策