Automatorのフォルダアクションを使ってスクショを特定のフォルダに移動させて、新しいものが上に来るようにする

2020.10.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部の夏目です。

先日はAWS Summit Onlineのブログを大量に書いていたのですが、大量のスクショを少しだけ扱いやすいようにAutomatorで仕組みを作ったので共有します。

問題点

  • デスクトップが画像でいっぱいになる
  • 撮ったスクショを探すために下までスクロールしないといけなくなる

前者はそこまで問題ではないのですが、後者が個人的には少し問題でした。

Finderのリスト表示を使えばできなくもないのですが、個人的にカラム表示が好きなので少々困ってしまいました。

解決策

画像ファイルがデスクトップに作成されたら、特定のディレクトリにリネームして保存する
今回はこれを実装してみました。

やり方としては次のとおりです。

  • Automatorのフォルダアクションを使ってデスクトップにファイルが置かれたら動く仕組みを作る
  • file --mimeコマンドで画像ファイルのみを識別する
  • Reversed Timestamp IDという最新のものほど値が小さくなるIDをファイル名に追記する

フォルダアクション

Automatorで作成できるものの一つ。
関連付けられたフォルダにファイルが追加されたときに、指定した処理を実行することができる。

file --mime

ファイルの種類を識別するためのコマンドには--mimeオプションがあります。
このオプションを指定すると、ファイルの種類をMIMEタイプで出力することができます。 (MIMEタイプ)

画像ファイルにはいくつもの種類があり拡張子も色々あります。
これをMIMEタイプとして識別することで画像ファイルかそれ以外かを識別しています。

Reversed Timestamp ID

サーバーレスの勉強会で見つけたある種のID。
UNIX Timestampを逆カウントにして、ゼロパディングしたもの。
そのため、桁数は一定で最新のものほど値が小さくなる。 これにより昇順のソートで新しいものほど上にくるようになる。

残念ながらこれ用のコマンドはないので、Rustでさらっと書きました。 (rtid-cli)

作ったもの

file_type=$(file -b --mime "$1")
file_name=$(basename "$1")
file_dir=$(dirname "$1")

mkdir -p "$file_dir/images_dt";

if [ "${file_type:0:5}" == "image" ]; then
	mv "$1" "$file_dir/images_dt/[$(/Users/natsume.yuta/.cargo/bin/rtid)] $file_name"
fi

Automatorのフォルダーアクションでシェルスクリプトを実行します。
次のことをやっています。

  1. 追加されたファイルのMIMEタイプを取得
  2. リネームするためにファイル名を取得
  3. ファイルが追加されたディレクトリを取得
  4. 画像ファイルを保存するためのディレクトリを作成 (すでに作成されている場合は何もしない)
  5. MIMEタイプの頭5文字がimageならファイル名にReversed Timestamp IDを付与して移動する

シェルスクリプトに対する入力は引数としてを選択します。
あとはDesktopをフォルダアクションの対象として登録すれば、完了です。

デスクトップに画像が保存されるたびにシェルスクリプトが実行され、自動的に移動とリネームがされるようになります。

まとめ

自動的に画像ファイルを移動させて、新しいものが上に来るようにすることができました。 体感では非常に便利になり、ブログを書くのが少し楽になりました。

これがそのまま使える人は少ないでしょうが、フォルダーアクションを使えばmacを色々カスタマイズすることができるんじゃないでしょうか。