写真ファイル管理に旋風を巻き起こす!

f:id:syonx:20180529001053p:plain

事の発端

f:id:syonx:20180529001203p:plain

プライベートなファイル、例えば写真とか音楽ファイルをガサッと整理することがありますよね。 先日、Mac の「写真.app」のライブラリを管理していた NAS の HDD がお逝きになって、なんとか復元したのですね。こんな感じ↓

f:id:syonx:20180529001232p:plain

こんなの見せられたら、もう関係ないの捨てたくなるじゃないですか。 だから、写真ファイルだけ取り出して整理しようと思ったんですね。 ほら、似たようなことをしてる記事がありました。やっぱりやるよね!

そうして中を開いてみたらこの有様ですよ。 ちゃっかり jpg を名乗った ._IMG_0102.jpg(4KB) …あなたどちら様ですか。

f:id:syonx:20180529001245p:plain

「先頭にドットが付いてるやつだけ除外すればいいじゃない」

この様子を見たら普通こう考えますよね。でも実際それどうやるんですか。 ちなみにこういうフォルダがめっちゃありますからね。 手作業でやってられる訳ないじゃないですか。

しかもですよ、写真ライブラリは今見てるこれだけじゃないんです。 他にも整理したいフォルダ群がドサーッとあるわけです。 IMG_0102.jpgってのは iPhone で撮影した 102 枚目の写真という名前であって、 これ他の iOS 端末で撮影した別の 102 枚目と重複したらどうするんですかと。 なんかあって上書きされたら悲しいじゃないですか。

じゃあどうするかと言うと、そこで思いつくのは 撮影日 をファイル名に添えてあげれば重複することはさすがに無くなるのではって話です。 だけど撮影日って何よ。ファイル更新日付とは別の何かじゃん。EXIF情報見ればいいんですね。

Flexible Renamer

f:id:syonx:20180529001307p:plain

Windows であれば Flexible Renamer という有能フリーソフトがあります。こいつを使えば高度な一括リネームができます。 しかも、できることはリネームだけではない。神。

f:id:syonx:20180529001325p:plain

ですが。コイツだけではやっぱり機能が足りないんです。 先程の 撮影日 。これが使えない。そりゃそうだ。 なんか他のソフト探したらあるかもしれないけど。 それから 階層を維持した取り出し操作 。これがしたい。 そしてなんと言っても 写真撮影年月日を YYYY/MM/DD で区切ったフォルダ にしたい。

ほかの写真整理ソフト情報。

ぼくのかんがえたさいきょうのツール開発、始まる

冷静に考えてみると上記の話って Mac の写真管理アプリの中身を Windows で操作しようって流れで普通意味わかんないですよね。 ということで…

を叶える最強のツールの開発が始まりました!

で、(割と)完成しました!!

🌀 "cyfs" -- Cyclone in file system

インストールするには Node.js 環境で $ npm i -g cyfs でOK。

例えばこんな感じのレシピ的な YAML ファイルを用意して…

select:
  pattern: "Masters/2018/**/*"
  options:
    cwd: "/Users/syon/Pictures/Photos Library.photoslibrary"
  name:
    regex:
      pattern: "\\.jpe?g$"
      flags: gi
  size:
    min: 5KB
    max: 20MB
action:
  do: chronicle
  args:
    mode: exif
    baseDir: "Masters/2018"
    destDir: "2018-photos"
    destFormat: "YYYY/MM/DD"
$ cyfs order.yaml

ッターンってやると

2018-photos/2018/05/01/IMG_0101.jpg
2018-photos/2018/05/01/IMG_0102.jpg
2018-photos/2018/05/02/IMG_0103.jpg
2018-photos/2018/05/02/IMG_0104.jpg
2018-photos/2018/05/03/IMG_0105.jpg
:

ズラズラ〜ってEXIFの撮影日を持つファイルがこんな感じに整理されます。 もちろん対象は写真だけではなくて、汎用的になっています。

機能はざっくり以下の通り。

  • select
    • 条件に合致するファイルのパスを出力
  • report
    • 条件に合致するファイルの各種情報を一覧出力(TSV)
  • delete
    • 条件に合致するファイルを削除
  • rename
    • 条件に合致するファイルのファイル名をリネーム
  • fetch
    • 条件に合致するファイルを階層を維持して取り出す
  • chronicle
    • 条件に合致するファイルを日時書式で階層を指定して移動する
  • copy
    • 条件に合致するファイルをフォルダ階層含め自由な文字列を指定してコピー
  • move
    • 条件に合致するファイルをフォルダ階層含め自由な文字列を指定して移動

はぁぁ〜〜〜超便利!!!

Unixコマンドあたり使いこなす人にはアレかもしれませんが、 ヒューマンリーダブルなレシピファイルによる再利用可能な操作は便利ですし、 実行プレビュー機能とかも付いてて安心ですよ。

こんな雑な説明で実際に使う人はいないと思いますが、マジで困ってたどり着いた方は きちんとバックアップを取ってお試しくださいませ。

これから自分で使って少しずつ改良していって、 インターフェース仕様がカッチリ固まってきたら Electron で GUI アプリ化をしたいと考えています。

おわり。