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件)
- ホワイトペーパー
- 企画特集
中小企業のセキュリティリスクとは?
ロリポップ!がリニューアル
パンデミック対策特集
仮想環境を実現するソリューション特集
集積度も性能も、業界最高水準のブレードPC
そのストレージで仮想化に対応できますか?
今注目の「サジェスト検索」−デモ掲載中
【徹底対談】運用管理ツールの賢い使い方
◆エン・ジャパン厳選求人☆毎週更新◆
ESBでIT投資の無駄を劇的に解消する
ストレージメディア特設サイト開設
セキュリティ&ユーザ事例【SIer Club】
御社のログ活用しませんか!?
SOA、BPM、SaaS −今、企業に必要なこと
インターネット上の悪意を未然に防ぐには?
- エンタープライズにおけるSUSEの強み
- サーバー監視・運用のコストを削減するには
- ■ストレージ容量50%削減保証■
- サービス・ドリヴン・データセンター
- 話題のタグ
Internet Explorer
iPhone 3G
Apple
Webデザイン
プログラミング言語
WebKit
データベース
Java
Google
Ajax
Adobe
SOA
Windows Vista
Firefox 3
OS
Opera
セキュリティ
Safari
アプリケーション
PHP
Database
Linux
iPod touch
Tips
Off Topic
Webサービス
脆弱性
HTML
仮想化
Mac OS X
オープンソース
UI
RIA
リファレンス
iPhone
Mozilla
開発環境
CSS
Chrome
Flash
Windows
ソフトウェア開発
Windows 7
インストール
Firefox
Microsoft
小技
ブラウザ
モバイル
JavaScript
話題のタグを見る »
Windows 7はLinuxへの切替が簡単:注目の仮想ディスクフォーマット「VHD」
iPhone OS 3.0で変わった「絵文字」
OSSのクラウド基盤「Eucalyptus」を使う(4)--インストール〜ノード構築
俳優経験者が指南する「人前で上手く話すためのティップス10選」
「うるまでるびペイント」登場:絵は上手下手ではなく制作過程に楽しみが
待てば回路の日和あり--「iPhone 3GS」発売、しかし――