この記事で解決できること
- スクショ・画面の録画を日付別のディレクトリに自動で移動してほしい!
- さらに言えば今日の日付のディレクトリがなかったら自動で作成されるようにしてそこに移動してほしい!
- スクショ・録画どちらも同じディレクトリに保存して、それを自動的に画像or動画を判別して前述のフォルダ分けしてほしい!
このあたりを解決していきます
環境
- macOS: Catalina v10.15.7
概要
こんなことしていきます
方法
スクリーンショット・動画の録画について
-
ここでは「⇧+⌘+4」とか「⇧+⌘+5」で撮れるMac標準機能での方法を解説してますがQuickTime Playerとかでも同じような設定でできるはずです
-
録画先を決める
Automatorの設定
-
先程のディレクトリ(ここでは「~/temp」)を指定
-
「シェルスクリプトを実行」を左のアクション一覧から持ってきて以下を指定
- シェル: 自分の使ってるシェル(今回はzsh)
- 入力の引き渡し方法: 引数として
- シェルスクリプト(.bashなら「=」のところを全て「==」にすればいける・・・はず)
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」フォルダにファイルが保存された時にこのシェルスクリプトが実行されますが、やってることは
- ファイルのMIMEタイプとファイル名を取得(file_typeとfile_name)
- MIMEタイプごとに保存先ディレクトリの存在チェックして、なければ作成
- MIMEタイプごとに保存先ディレクトリにファイルを移動
です
(一応)フォルダアクションが本当にフォルダに紐付いているかチェック
- Finderで「~/temp」のあるディレクトリまで移動する
- 「~/temp」を右クリック→「フォルダアクション設定」→サービスを確認...と出るので「サービスを実行」
- ちゃんと紐付いてるかチェック
- 紐付いてなかったら「~/temp」を選択した状態で右下の「+」から先程保存した名前のワークフロー(ここではScreenCapture.workflow)を選択して紐付ける
これでOK!
- スクショや画面の動画を「~/temp」に保存するとそれぞれ対応した日付フォルダにAutomator君が飛ばしてくれます。
偉い子!
おまけ的な話
-
オンライン会議とかを画面収録する時、通常では相手の声は聞こえないので以下を参考にすると良い感じでした!
Macの音声の録音方法を解説。動画・音声をキャプチャする。 Skype、Zoom、QuickTime Playerも音声録音可能に -
ターミナルのログも日付別のフォルダに自動で保存してほしいよねってことでこちら参考にして設定してます
[Mac][ターミナル]ターミナルのログを自動で取得する - Qiita -
いろんな記事を漁ると、保存先のパスが
~/"$(date "+%Y")"/"$(date "+%m")"/"$(date "+%d")"
→ex. ~/2021/02/11
ってなってること多い気がしますけど僕はあんまり深くなると色んな日付をいったり来たりするのがめんどくさいので上で紹介した通り
~/"$(date "+%Y%m%d")"
→ex. ~/20210211
ってしてますね(好みの問題ですが!)