memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

ファイル名から日付情報を取り出してファイル更新日付にセットするrubyスクリプト

写真や動画の管理にGoogleフォトを利用しています。

Googleフォトではファイルの日付情報をもとに時系列で管理することができます(Googleフォトに限らず、AppleのPhotoなんかもそうだったと思います)。

ファイルの日付情報は、写真の場合はExif情報から、動画ファイルの場合は恐らくファイル作成日(?)で判断しているものと思います。 8/30追記:動画ファイルにもExif情報がありました。すいません。なので、以下はタイトルの通りでファイル更新日付を変更できますが、Exifを利用した動画サイトへのアップロードには対応していませんので、ごめんなさい。新しい記事をこちらに書きました。参照してください。

個人的に管理している動画ファイルがたくさんあって、その日付がデタラメなものがありました。恐らく、過去に一括で処理して作成したため、撮影した日付ではなく処理した日付になってしまっているものと。。。

このままGoogleフォトにアップロードするとおかしなことになりますので。。。ファイルの日付を一括で変更できないかな。。。といろいろ探してみたんですね。でも、いいものがなかなかない。

コマンド使ったりファイルを選択して操作できるMacアプリもあったので、できなくはないけど面倒そうでした。

私の場合はファイル名に日付情報があります。例えば、本日の場合は「20170822xxxxxx.xxx」という感じです。この日付情報(年月日)を利用して、半自動的に日付情報をセットしたい。。。のでした。

「なければつくればいい」どなたが言ったかわかりませんが名言です。

Dir::glob('*.mp4').each {|src|
  y = src[0, 4]
  m = src[4, 2]
  d = src[6, 2]
  if y =~ /\A-?\d+\Z/ and m =~ /\A-?\d+\Z/ and d =~ /\A-?\d+\Z/ then
    t = Time.mktime(y.to_i,m.to_i,d.to_i,0,0,0)
    File::utime(t,t,src)
  end 
}

動画ファイルの入ったフォルダにこのスクリプトを置いて実行するだけです。Rubyって便利ですねぇ。。。やっぱり。

ちなみに以下のようなファイル群に対して実行すると、

f:id:ke_takahashi:20170822172958p:plain

一瞬で以下のようにできます。

f:id:ke_takahashi:20170822173018p:plain

はい、プログラミングパワーです(あ、ハンドパワーですっていうのをモジッタつもりですが。。。知らない人多いかもしれないなぁ。。。もう)。