写真を撮影日時のフォルダに一括移動する

一括ダウンロードした Google フォトの写真を日付フォルダに移動したい

Googleフォトから写真を一括ダウンロード(例えば: Googleフォトから写真を一括ダウンロードし、容量を回復させる方法 #初心者 – Qiita などを参照のこと)すると、年単位くらいは分類してくれる。

これを撮影日時のフォルダに整理したい。

スマホやデジカメなど写真を撮ると、Exif (Exchangeable Image File Format) という情報が写真データに埋め込まれる。 ここに撮影日時の情報が格納される。これを使って日付ごとのフォルダを作成して移動すれば良い。

Rubyでプログラミング

どのプログラミング言語で書いても良いと思う。自分の場合は慣れたRubyで書く。

今回は Ruby 3.3.0を使う

Debian に rbenv で Ruby 3.1.0をインストールで書いたように3.3.0をインストールして、カレント・フォルダだけを3.3.0を使うようにする。

rbenv install 3.3.0
rbenv local 3.3.0

gem を インストール

RubyでExifにアクセスするには exifr (EXIF Reader)というgemをインストールする。

gem install exifr 

Rubyプログラム

下のようなコードでカレント・フォルダにあるjpg, JPG ファイルを日付フォルダに根刮ぎ(ねこそぎ)移動する。 なお、ファイル名で大文字・小文字を区別しているのは実行環境がLinuxだから。

エラー処理は甘いから、使う場合は自己責任だよ。不安であれば、エラー処理などを追加すれば良い。

#!/usr/bin/env ruby

require 'exifr/jpeg'
require 'fileutils'

jpg_list = Dir.glob(["*.JPG", "*.jpg"]).each{|jpg_path|

  p jpg_path

  # jpg_path = 'IMG_0240.JPG'
  if FileTest.exist?(jpg_path)
    exif_data = EXIFR::JPEG.new(jpg_path)

    if exif_data.exif?
      date  = exif_data.date_time
      p date
      if date != nil
        dir_name = date.strftime("%Y-%m-%d")
        # dir_nameが存在しなければ作成する
        if !FileTest.exist?(dir_name)
          puts "#{dir_name} does not exsit. Now newly made."
          Dir.mkdir(dir_name)
        end
        FileUtils.mv(jpg_path, dir_name)
      end
    end
end

}