写真ファイル管理に旋風を巻き起こす!
事の発端
プライベートなファイル、例えば写真とか音楽ファイルをガサッと整理することがありますよね。 先日、Mac の「写真.app」のライブラリを管理していた NAS の HDD がお逝きになって、なんとか復元したのですね。こんな感じ↓
こんなの見せられたら、もう関係ないの捨てたくなるじゃないですか。 だから、写真ファイルだけ取り出して整理しようと思ったんですね。 ほら、似たようなことをしてる記事がありました。やっぱりやるよね!
そうして中を開いてみたらこの有様ですよ。
ちゃっかり jpg を名乗った ._IMG_0102.jpg
(4KB) …あなたどちら様ですか。
「先頭にドットが付いてるやつだけ除外すればいいじゃない」
この様子を見たら普通こう考えますよね。でも実際それどうやるんですか。 ちなみにこういうフォルダがめっちゃありますからね。 手作業でやってられる訳ないじゃないですか。
しかもですよ、写真ライブラリは今見てるこれだけじゃないんです。
他にも整理したいフォルダ群がドサーッとあるわけです。
IMG_0102.jpg
ってのは iPhone で撮影した 102 枚目の写真という名前であって、
これ他の iOS 端末で撮影した別の 102 枚目と重複したらどうするんですかと。
なんかあって上書きされたら悲しいじゃないですか。
じゃあどうするかと言うと、そこで思いつくのは 撮影日 をファイル名に添えてあげれば重複することはさすがに無くなるのではって話です。 だけど撮影日って何よ。ファイル更新日付とは別の何かじゃん。EXIF情報見ればいいんですね。
Flexible Renamer
Windows であれば Flexible Renamer という有能フリーソフトがあります。こいつを使えば高度な一括リネームができます。 しかも、できることはリネームだけではない。神。
ですが。コイツだけではやっぱり機能が足りないんです。 先程の 撮影日 。これが使えない。そりゃそうだ。 なんか他のソフト探したらあるかもしれないけど。 それから 階層を維持した取り出し操作 。これがしたい。 そしてなんと言っても 写真撮影年月日を YYYY/MM/DD で区切ったフォルダ にしたい。
ほかの写真整理ソフト情報。
- JPEG Image Filer:Exif情報を利用し写真を自動的に撮影日ごとのフォルダに分類する | 忘れ荘
- 大量の写真を日付ごとに自動分別「簡単デジカメ写真整理」 - 休み中にやりたい、ため込んだ写真整理術 - 窓の杜
ぼくのかんがえたさいきょうのツール開発、始まる
冷静に考えてみると上記の話って Mac の写真管理アプリの中身を Windows で操作しようって流れで普通意味わかんないですよね。 ということで…
- クロスプラットフォーム!
- 自由なリネーム!
- 柔軟なファイル選択!
- 様々なアクション!
- 宣言的で再利用可能!
を叶える最強のツールの開発が始まりました!
で、(割と)完成しました!!
🌀 "cyfs" -- Cyclone in file system
- syon/cyfs Node.js用。READMEあり。
- syon/cyfs-cli コマンドライン版。oclif製。
インストールするには 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 アプリ化をしたいと考えています。
おわり。