[Mac]スクリーンショット・画面収録を日付ごとのディレクトリに自動で保存する


この記事で解決できること

  • スクショ・画面の録画を日付別のディレクトリに自動で移動してほしい!
  • さらに言えば今日の日付のディレクトリがなかったら自動で作成されるようにしてそこに移動してほしい!
  • スクショ・録画どちらも同じディレクトリに保存して、それを自動的に画像or動画を判別して前述のフォルダ分けしてほしい!

このあたりを解決していきます

環境

  • macOS: Catalina v10.15.7

概要

こんなことしていきます

方法

スクリーンショット・動画の録画について

  • ここでは「⇧+⌘+4」とか「⇧+⌘+5」で撮れるMac標準機能での方法を解説してますがQuickTime Playerとかでも同じような設定でできるはずです

  • 録画先を決める

    • 「⇧+⌘+5」でオンスクリーンコントロールを表示する
    • 「オプション」から保存先を任意で設定する
    • (以下ではわかりやすく「~/temp」としてます)

Automatorの設定

  • フォルダアクションを新規作成

  • 先程のディレクトリ(ここでは「~/temp」)を指定

  • 「シェルスクリプトを実行」を左のアクション一覧から持ってきて以下を指定

    • シェル: 自分の使ってるシェル(今回はzsh)
    • 入力の引き渡し方法: 引数として
    • シェルスクリプト(.bashなら「=」のところを全て「==」にすればいける・・・はず)
ScreenCapture.workflow
ImageSaveDir=/Users/(個人ディレクトリ)/Pictures/ScreenShot/"$(date "+%Y%m%d")"
VideoSaveDir=/Users/(個人ディレクトリ)/Movies/VideoCapture/"$(date "+%Y%m%d")"

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

# saveDirが存在するかチェック
if [ "${file_type:0:5}" = "image" ]; then
    if [ ! -e $ImageSaveDir ]; then
        mkdir $ImageSaveDir 
    fi
elif [ "${file_type:0:5}" = "video" ]; then
    if [ ! -e $VideoSaveDir ]; then
        mkdir $VideoSaveDir 
    fi
fi

# 追加されたファイルを移動
if [ "${file_type:0:5}" = "image" ]; then
    mv "$1" "$ImageSaveDir/$file_name"
elif [ "${file_type:0:5}" = "video" ]; then
    mv "$1" "$VideoSaveDir/$file_name"
fi

全て指定すると以下のようになります。
⌘+Sで名前をつけて保存(ここではScreenCapture.workflow)。

「~/temp」フォルダにファイルが保存された時にこのシェルスクリプトが実行されますが、やってることは

  1. ファイルのMIMEタイプとファイル名を取得(file_typeとfile_name)
  2. MIMEタイプごとに保存先ディレクトリの存在チェックして、なければ作成
  3. MIMEタイプごとに保存先ディレクトリにファイルを移動

です

(一応)フォルダアクションが本当にフォルダに紐付いているかチェック

  • Finderで「~/temp」のあるディレクトリまで移動する
  • 「~/temp」を右クリック→「フォルダアクション設定」→サービスを確認...と出るので「サービスを実行」
  • ちゃんと紐付いてるかチェック
    • 紐付いてなかったら「~/temp」を選択した状態で右下の「+」から先程保存した名前のワークフロー(ここではScreenCapture.workflow)を選択して紐付ける

これでOK!

  • スクショや画面の動画を「~/temp」に保存するとそれぞれ対応した日付フォルダにAutomator君が飛ばしてくれます。
    偉い子!

おまけ的な話

~/"$(date "+%Y")"/"$(date "+%m")"/"$(date "+%d")"
→ex. ~/2021/02/11

ってなってること多い気がしますけど僕はあんまり深くなると色んな日付をいったり来たりするのがめんどくさいので上で紹介した通り

~/"$(date "+%Y%m%d")"
→ex. ~/20210211

ってしてますね(好みの問題ですが!)

参考