環境
macOS Catalina 10.15.6
bash 5.0.18
やりたいこと
プログラミングをしていると何かとtmpディレクトリにお世話になるが、しばらくするとゴチャゴチャになってしまうので、それを解消するため、定期的に空にしてくれるプログラムを作りたい
そもそもtmpは一時的なという意味で、使うときはずっと残しておくことは想定していない(はず)ので、自動で空にしても大丈夫
仕様
試験的に、毎週月曜日の12:00に空にする。
ただ、流石に即削除をしてしまうと事故が起きる可能性があるので、一週間はサブのディレクトリに保存しておき、次の週に新しいデータと取り換える。
ディレクトリ構造
HOME
├── tmp_dir
│ └── README.txt
├── tmp_dir_sub
│ └── README.txt
└── tmp_reset.sh
※HOMEはホームディレクトリ
tmp_dirがメインのディレクトリで、tmp_dir_subが事故防止用のディレクトリとなっている。また、それぞれのディレクトリ内にはREADME.txtが置いてあり、注意書きが書かれている。
以後、tmp_dirをメインディレクトリ、tmp_dir_subをサブディレクトリと表記します。
実装したもの
# サブディレクトリにメインディレクトリの状態をコピーrm-rf ~/tmp_dir_sub
cp-r ~/tmp_dir ~/tmp_dir_sub
# メインディレクトリの初期化rm-rf ~/tmp_dir
mkdir ~/tmp_dir
# それぞれのディレクトリのREADME.txtの作成cd ~/tmp_dir
touch README.txt
echo"This is temporary directory.">> README.txt
echo"This directory is reset by ~/tmp.sh at noon of every monday.">> README.txt
echo"But, the datas will be saved until next week.">> README.txt
cd ~/tmp_dir_sub
echo"Warning! this directory will be deleted, because copy from ~/tmp_dir at noon of every monday."> README.txt
これを実行すると、メイン・サブディレクトリと、それぞれのディレクトリに注意書きが書かれたREADME.txtが生成される。(英語は多分正しくない)
最後の準備
最後に、自動的にこのスクリプトを実行する準備をしておく。
~ $ chmod 755 tmp_reset.sh
~ $ crontab -e # 以下を追記
00 12 * * 1 bash ~/tmp_reset.sh
これで準備はできた。crontab -e実行後にメッセージボックスが出た場合、OKや許可を押す。
chmodはパーミッションの変更、crontabはコマンドの自動実行の設定を行い、こうすることで月曜日の12:00にホームディレクトリのtmp_reset.shが実行される。
終わりに
確認してみると、想定通りの動作をしていました。
ただ、スリープ状態だとcrontabは呼び出されないので、スリープ解除の機能を使うなど、少し工夫が必要です。(環境によるのでここでの紹介は省きます。「OS名 crontab スリープ」などで出てきます。)