我が家ではデジカメやスマホで撮影した写真をNASに保存し、PCやスマホから閲覧可能にしている。フォルダは日付別に分けて整理しているが、数カ月分の写真をまとめて吸い出すことも多く、手動での整理に限界が来つつあった。
大抵のファイルシステムであればファイルそのものに作成時刻(≒撮影日時)が付与されているので、この情報を読み出してフォルダ分けを自動化できると考えた。
参考情報
既に同様のプログラムが紹介されていたので参考にした
Rubyでファイル/ディレクトリを年ごとに整理 - yuuponの日記
仕様
ファイルを整理したいディレクトリにて作成したRubyスクリプトを実行する。
全てのファイルが、年/日付毎のフォルダに整理される。
ファイルの日付と作成時刻が合っていないファイルが混じっていても、あくまで作成時刻を基準に選別している。
日付フォルダの末尾に「_iPhone5s」といったデバイス名を付与しているが、こういった仕様も簡単にカスタマイズできる。そう、Rubyならね。
尚、実行環境がWindowsであればRubyInstaller for Windowsをインストールし、.rbと関連付けしておくことで、当該スクリプトをダブルクリックするだけで実行できる。
スクリプト
rearrange.rb
#!/usr/bin/ruby require 'fileutils' SEPARATOR = "/" DEVICE_NAME = "iPhone5s" # Dirクラス class Dir # mkdir -p に相当 def self.mkdir_r path base = Dir.pwd path.partition(SEPARATOR).each do |s| if s != SEPARATOR if !(Dir.exists? s) Dir.mkdir s end Dir.chdir s end end Dir.chdir base end # ファイル整理 def rearrange! self.each do |file| # 本スクリプトは整理対象から外す if File.absolute_path(file) != File.absolute_path(__FILE__) # ディレクトリは整理対象から外す if !(File.directory?(file)) # 撮影時刻を取得し、パスを生成する time = File.mtime(file) path = time.strftime("%Y") path = path + SEPARATOR + time.strftime("%Y%m%d_" + DEVICE_NAME) # フォルダを生成する Dir.mkdir_r path # ファイルを移動する path = path + SEPARATOR + file File.rename file, path end end end end end # カレントディレクトリに対してファイル整理を実行する Dir.new(Dir.pwd).rearrange!.close