Logic Delight

明日のワシは忘れてしまうから、コードにはコメントを書くのです。

デジカメ取り込み画像の日付フォルダ振り分け

デジカメを買い換えたら、画像を取り込むソフトウェアのフォルダの切り方が異なる仕様だったため、自動で振り分けるスクリプトを作りました。

■フォルダ構成
・旧デジカメ(こっちの構成の方がお気に入り)
DigitalCamera
└YYYY
 └YYYY_MM_DD

・新デジカメ
DigitalCamera
└YYYYMMDD

■move_picture_folders.rb

require 'fileutils'

# 対象ディレクトリの内容を移動し、対象ディレクトリを削除する
def move_pictures(src_dir, target_dir)
  p 'move_pictures()'
  p '  src_dir:' + src_dir
  p '  target_dir:' + target_dir
  FileUtils.mv(Dir.glob(src_dir + '/**/*'), target_dir, {:force => true})
  FileUtils.rmdir(src_dir)
end

# 対象ディレクトリの移動
#  移動先にフォルダが存在しない場合は、リネームで処理
def move_folders(src_dir)
  yyyy = src_dir[0..3]
  mm = src_dir[4..5]
  dd = src_dir[6..7]
  
  new_dir_name = yyyy + '_' + mm + '_' + dd
  
  target_dir = File.join(File.dirname(src_dir), yyyy, new_dir_name)
  
  if File.exist?(target_dir)
    move_pictures(src_dir, target_dir)
  else
    p 'rename()'
    p '  src_dir:' + src_dir
    p '  target_dir:' + target_dir
    File::rename(src_dir, target_dir)
  end
end

# DigitalCameraフォルダ内のYYYYMMDDフォルダの内容を
# YYYYフォルダ内のYYYY_MM_DDフォルダとして移動する
def move_them(target_path)
  if target_path
    Dir::chdir(target_path)
  else
    return
  end
  Dir.foreach(target_path) {|f|
    if /\d{8}/ =~ f
      move_folders(f)
    end
  }
end

#
# メインルーチン
# 引数0:DigitalCameraフォルダパス
#

# 削除
move_them(ARGV[0])