親父からもらった数千枚の写真を手作業で日付変更するのはムリ
親父が昔、フィルムカメラで撮ってくれた、私の写真をDVD2枚に焼いてくれました。前編では、Googleフォトを使用して、複数の写真を選択して一度に同じ日付に変更する方法をご紹介しました。
ところが、今回もらった写真は数千枚。日付の種類だけでも数百日の指定が必要です。
Googleフォトで日付を数百日分、手作業で設定していくのは無理があります。そういう作業が好きな方もいらっしゃると思いますが、私としては、できるだけ早く親戚に昔の写真をシェアしたいという思いもありました。
まずは、写真データの格納ルールを確認して、何とか一括で日付処理できる方法を考えていきます。
写真データの格納ルールの確認
データを取り込んだ時に、親父が、年代別、月別にデータを分けていてくれました。
構成としては、
????2022
└????2201 なんちゃら
└〇〇.JPG
└△△.JPG
└・・・
└????2202 かんちゃら
└????・・・
という感じです。
Mac ターミナルを使用した対応方法
Macで写真の日付をアップデートする方法を探したところ、ターミナルを使用して、
touch -t 200212240000 2002/0212 24クリスマス/DSCN0007.JPG
とすると、
????2002
└????0212 24クリスマス
└DSCN0007.JPG
の写真の日付が、2002/12/24 00:00とすることができました。
上級者は、Pythonとかでプログラムの作成をしてもいいかも
なので、下記のようなコードを自動生成してくれるプログラムを書いて走らせるのがいいのかなと思います。できる人はやってみてください。
touch -t YYYYMMDD0000 YYYY/YYMM*/*
YYYYは、フォルダ名の「2002」、MMは、フォルダ名の「0212」の下2桁、DDは日付があるフォルダは日付を取得、ないフォルダには01など決めた値を入れ、時間は00:00とするなど、が考えられます。
GoogleスプレッドシートとMac ターミナルを使い、日付変更を半自動化(中級者)
Pythonなどのプログラムを使うのはあまり慣れていないので、私自身の学習時間+作業時間の合計がより短い時間でできる方法、慣れている道具を使った方法を考えてみました。少し泥臭くはなりますが、プログラムを使用するより、多くの方に試していただける方法になっていると思います。
Googleスプレッドシートで命令文を作成します
命令文自体、プログラムで反復させて生成できるかもしれません。ここでは、少し泥臭いですが、Googleスプレッドシートで命令文を作成してみます。
ひと月ごとのセルを用意する
まず、連続するふた月分のセルを用意します。それを必要なだけ縦にコピーすれば、例えば1984年の5月1日から、2023年の2月1日までの連続した月が用意できます。
1984/05/01 |
1984/06/01 |
touch -t コマンドを生成するための数式を用意する
用意した月の隣のセルに、下記のような数式を記載します。
="touch -t "&text(A2,"yyyymmdd")&"0000 "&text(A2,"yyyy/yymm")&"*/*;\"
touch -t
は、写真の日付を更新してくれるコードです。TEXT関数で、日付からyyyymmddの形式でお隣のセルから日付を持ってきてくれます。時間は00時00分にしてあります。そして、どのファイルにその日付を付与するかというと、????1984 – ????8405 ホゲホゲ フォルダの全ての写真を1984年5月1日00時00分の日付にする、ということです。
生成されたコードは下記の通りになります。
touch -t 198405010000 1984/8405*/*;\
最後の「;」は複数の命令文を繋げて実行し、「\」は、直後の改行を無視するという意味になります。
これを全ての月に当てはめると、このように、ずらっとコードが生成されます。
命令文の列をコピペするとこのようになります。
touch -t 198405010000 1984/8405*/*;\
touch -t 198406010000 1984/8406*/*;\
touch -t 198407010000 1984/8407*/*;\
touch -t 198408010000 1984/8408*/*;\
touch -t 198409010000 1984/8409*/*;\
touch -t 198410010000 1984/8410*/*;\
touch -t 198411010000 1984/8411*/*;\
・・・
Googleスプレッドシートで生成したコマンドをMac ターミナルで実行
ターミナルとしては、最後の改行は無視して、下記のような1行の命令を受け取っていることになります。
touch -t 198405010000 1984/8405*/*;touch -t 198406010000 1984/8406*/*;touch -t 198407010000 1984/8407*/*;touch -t 198408010000 1984/8408*/*;touch -t 198409010000 1984/8409*/*;touch -t 198410010000 1984/8410*/*;touch -t 198411010000 1984/8411*/*;・・・
ターミナルで、数百行のコマンドを貼り付けて実行すると、下記の通り、月ごとのフォルダの中の写真は、無事、ついたちの日付に更新されました。
user@MacBook-Pro user pics % ls -l 2002/0212\ 24クリスマス
total 30352
-rwxr-xr-x 1 user staff 203262 Dec 1 2002 DSCN0001.JPG
-rwxr-xr-x 1 user staff 234990 Dec 1 2002 DSCN0002.JPG
-rwxr-xr-x 1 user staff 240180 Dec 1 2002 DSCN0003.JPG
Finderで見てみても2002年12月1日 午前12:00となっていました。
スプレッドシートとターミナルの組み合わせは結構いいかも
今回、スプレッドシートとターミナル組み合わせてみましたが、結構いい気がしました。
環境の準備が不要
Visual Studio Codeを用意したり、色々とインストールする必要がありません。スプレッドシートはブラウザだけでアクセスできますし、ターミナルも元からどのMacにも入っています。Windowsの方も、ターミナルの代わりにコマンドプロンプトで同じことができると思います。
何をしているのか見失いにくい
プログラムを書くと、日常的にその言語に触れている人には全く問題ないけれど、たまに言語を扱うような人だと、コマンドのルールや書き方など、忘れがち。再起的な記述も、疲れた脳には負荷が高い。なので、スプレッドシートで、泥臭く全行書いてあったりすると、脳みそのリソースが減らせる。脳みそをできるだけ使わない、が今年の目標なので、この点でもいい気がします。
コメント