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

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

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

# 環境
- macOS: Catalina v10.15.7

# 概要
![Screenshot 2021-02-11 21.08.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490917/398705c1-3673-e0de-3cad-3b839b843b5e.png)

こんなことしていきます

# 方法

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

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

- 録画先を決める
    - 「⇧+⌘+5」でオンスクリーンコントロールを表示する
![bab66068f4457009217cf7ab892e7452.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490917/fb8136d5-1f29-ab40-d5e2-a6a7eb480b51.png)

    - 「オプション」から保存先を任意で設定する
    - (以下ではわかりやすく「~/temp」としてます)

## Automatorの設定
- フォルダアクションを新規作成
![Screenshot 2021-02-11 22.35.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490917/89bcb265-3a58-3805-bc09-800d91857e5f.png)

- 先程のディレクトリ(ここでは「~/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)。

![Screenshot 2021-02-11 22.39.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490917/b15749a9-5a1f-6640-88ba-a4eb3cb2c13a.png)

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

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

です


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

![Screenshot 2021-02-11 23.03.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490917/8c28446c-b411-5b09-2212-c94379c5db8f.png)

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

# おまけ的な話
- オンライン会議とかを画面収録する時、通常では相手の声は聞こえないので以下を参考にすると良い感じでした！
[Macの音声の録音方法を解説。動画・音声をキャプチャする。 Skype、Zoom、QuickTime Playerも音声録音可能に](https://dyny001.net/soundvoice-capture/)

- ターミナルのログも日付別のフォルダに自動で保存してほしいよねってことでこちら参考にして設定してます
[[Mac][ターミナル]ターミナルのログを自動で取得する - Qiita](https://qiita.com/imura81gt/items/1ffaaff3cc1e9613925f)

- いろんな記事を漁ると、保存先のパスが

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

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

```
~/"$(date "+%Y%m%d")"
→ex. ~/20210211
```
ってしてますね(好みの問題ですが！)

# 参考
- [<title>MIME タイプ (IANA メディアタイプ) - HTTP | MDN</title>](https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types)
- [<title>Automatorのフォルダアクションを使ってスクショを特定のフォルダに移動させて、新しいものが上に来るようにする | DevelopersIO</title>](https://dev.classmethod.jp/articles/automator-mv-desktop-image-specific-directory-and-rename-rtid/)
- [<title>macOS SierraでAutomatorのフォルダアクションが上手く動かないから調整した。 - 孤毒の果て</title>](http://kotokunohate.hatenablog.com/entry/2016/12/25/macOS_Sierra%E3%81%A7Automator%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%8C%E4%B8%8A%E6%89%8B%E3%81%8F%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%84)