LoginSignup
3
3

More than 1 year has passed since last update.

特定の期間以上経過したファイルを削除するスクリプト処理

Last updated at Posted at 2022-05-26

はじめに

31日以上前のファイルを定期的に削除するスクリプトを作成し、cronで定期削除する設定をしましたので、まとめます。

前提条件

サーバーは、EC2のlinuxになります。

処理の詳細

結論から言いますと、毎日、以下の通りにスクリプト処理を実行できるようにします。

  • 0時:31日以上前の不要ファイルをtrashディレクトリに移動
  • 1時:EC2のスナップショット(バックアップ)を作成(今回説明はしません)
  • 2時:trashディレクトリを削除し、空のtrashディレクトリを再作成

今回は、ルートディレクトリをtestとして、その配下にtestA、更に配下にtestAを設置します。
今回の目的は、testtestAtestBディレクトリ内の31日以上前の不要ファイルを削除します。
(以後不要ファイルは、31日以上前のファイルを指します。)

.test
└── testA
    └── testB

削除するに当たり、trashというディレクトリを作成し、trashディレクトリ配下に、testA、testBの同様のディレクトリを作成します。

trashディレクトリを作成する理由は、不要ファイルをtrashディレクトリに移動したあとに、一度バックアップをとったうえで、削除するためです。
万が一削除してほしくないファイルを削除した場合、リカバリできますので。

.test
├── testA
│   └── testB
└── trash
    └── testA
        └── testB

スクリプト処理を作成

先程も説明しましたが、スクリプト処理は、不要ファイルを移動させる処理と、削除する処理の2つに分かれます。

  • 0時:31日以上前の不要ファイルをtrashディレクトリに移動
  • 1時:EC2のスナップショット(バックアップ)を作成(今回説明はしません)
  • 2時:trashディレクトリを削除し、空のtrashディレクトリを再作成

不要ファイルを移動させる処理をmove-unnecessary-files.sh
削除する処理をdelete-unnecessary-files.shとします。

今回、この2つのファイルは、testディレクトリ内にscriptディレクトリを作成し、そのディレクトリ内に設置します。

.test
├── script
│   ├── move-unnecessary-files.sh
│   └── delete-unnecessary-files.sh
├── testA
│   └── testB
└── trash
    └── testA
        └── testB

不要ファイルを移動させる処理

move-unnecessary-files.sh
#!/bin/sh
sudo find /test/ -maxdepth 1 -daystart -mtime +31 -name "*.html" | xargs sudo mv -t /test/trash
sudo find /test/testA/ -maxdepth 1 -daystart -mtime +31 -name "*.html" | xargs sudo mv -t /test/trash/testA
sudo find /test/testA/testB/ -maxdepth 1 -daystart -mtime +31 -name "*.html" | xargs sudo mv -t /test/trash/testA/testB

maxdepthは、検索する深さを指定しています。-maxdepth 1の場合、カレントディレクトリのみを検索します。
-mtime +31は、32日以上前のファイルを指定しています。
-name "*.html"は、htmlファイルに限定しています。

上記の設定によって、不要ファイルをtrashのディレクトリに移動させることができます。

削除する処理

delete-unnecessary-files.sh
#!/bin/sh
sudo rm -r /test/trash
sudo mkdir -m 755 /test/trash
sudo mkdir -m 755 /test/trash/{testA,testA/testB}
sudo chown -R ec2-user:ec2-user /test/trash

mkdirは、{testA,testA/testB}という書き方をすることで、複数のディレクトリを作成することができるようです。
-m 755で権限も同時に設定できます。
chownで設定する所有者とグループは、適宜変えてください。

cron設定

今回は、EC2でcronを設定しますが、EC2にssh接続し、dateコマンドで日本時間かどうか確認してください。

設定されていない場合、こちらの記事で設定してください。
厳密には、UTCのままでもよいですが。

タイムゾーンを変更した場合、cronのジョブに反映させるためにはcrondの再起動が必要な場合があります。

$ sudo service crond restart

では、スクリプト処理のファイルを2つ設置しましょう。

.test
├── script
│   ├── move-unnecessary-files.sh
│   └── delete-unnecessary-files.sh
├── testA
│   └── testB
└── trash
    └── testA
        └── testB

所有者がrootになっている場合、適宜変更しましょう。


$ ls -la test/
合計 0
drwxr-xr-x  5 root     root      45  5月 27 00:19 .
dr-xr-xr-x 19 root     root     269  5月 27 00:09 ..
drwxr-xr-x  2 root     root      74  5月 27 00:17 scipt
drwxr-xr-x  3 root     root      19  5月 27 00:10 testA
drwxr-xr-x  3 root root  19  5月 27 00:19 trash



$ ls -la test/scipt/
合計 8
drwxr-xr-x 2 root root  74  5月 27 00:17 .
drwxr-xr-x 5 root root  45  5月 27 00:19 ..
-rw-r--r-- 1 root root 157  5月 27 00:15 delete-unnecessary-files.sh
-rw-r--r-- 1 root root 334  5月 27 00:15 move-unnecessary-files.sh


$ sudo chown ec2-user:ec2-user -R test/

cronが起動しているか確認してから設定しましょう。EC2は、デフォルトで起動しています。

$ service crond status
  Active: active (running)

$ crontab -e
cron
# 毎日定期削除 タイムゾーンは日本
0 0 * * * /test/script/move-unnecessary-files.sh
0 2 * * * /test/script/delete-unnecessary-files.sh

これで設定完了です。

実行されたかどうか確認するため、logを確認しましょう。

$ sudo tail -f /var/log/cron

May 20 00:00:01 ip-xxxxxxxx CROND[11052]: (ec2-user) CMD (/test/script/move-unnecessary-files.sh)
May 20 02:00:01 ip-xxxxxxxx CROND[11052]: (ec2-user) CMD (/test/script/delete-unnecessary-files.sh)

実行されない場合

ログでパーミッションエラーが出た場合、ディレクトリやファイルの所有者や権限を確認しましょう。

また、直接スクリプトを実行し、問題ないか確認してみましょう。

$ source /test/scipt/move-unnecessary-files.sh

$ source /test/scipt/delete-unnecessary-files.sh

テスト用の不要ファイルを作成

上記のスクリプト処理ができているかテストするために、32日以上前のファイルを作成しましょう。
以下のコマンドで、2022年1月1日12:00のファイルを作成することができます。

$ touch -t 202201011200.00 abc.html

そして、cronで削除されているか確認できますね。

参考

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3