Skip to content

tmpwatch で一定時間経過したファイルを削除する

一定時間以上経過しているファイルを削除したい、という場合は tmpwatch を使うと便利です。

検証環境

1
2
$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

インストール

CentOS 7.2 では普通に yum でインストール出来ました。

1
2
sudo yum update -y
sudo yum install -y tmpwatch

テスト用のファイルを作成する

テスト用のファイルを作成します。touch -d で作成日を指定したファイルが作れますので、一日おきのファイルを作成してみました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
touch -d "2016/7/15 00:00:00" test15.txt
touch -d "2016/7/16 00:00:00" test16.txt
touch -d "2016/7/17 00:00:00" test17.txt
touch -d "2016/7/18 00:00:00" test18.txt
touch -d "2016/7/19 00:00:00" test19.txt
touch -d "2016/7/20 00:00:00" test20.txt
touch -d "2016/7/21 00:00:00" test21.txt
touch -d "2016/7/22 00:00:00" test22.txt
touch -d "2016/7/23 00:00:00" test23.txt
touch -d "2016/7/24 00:00:00" test24.txt

意図した通りにファイルが作成されました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ ls -l
total 0
-rw-rw-r-- 1 user user 0 Jul 15 00:00 test15.txt
-rw-rw-r-- 1 user user 0 Jul 16 00:00 test16.txt
-rw-rw-r-- 1 user user 0 Jul 17 00:00 test17.txt
-rw-rw-r-- 1 user user 0 Jul 18 00:00 test18.txt
-rw-rw-r-- 1 user user 0 Jul 19 00:00 test19.txt
-rw-rw-r-- 1 user user 0 Jul 20 00:00 test20.txt
-rw-rw-r-- 1 user user 0 Jul 21 00:00 test21.txt
-rw-rw-r-- 1 user user 0 Jul 22 00:00 test22.txt
-rw-rw-r-- 1 user user 0 Jul 23 00:00 test23.txt
-rw-rw-r-- 1 user user 0 Jul 24 00:00 test24.txt

tmpwatch で削除対象となるファイルを確認する(削除はしない)

-t(--test)オプションを指定すると実際にファイルは削除せず、削除対象となるファイルの確認だけを行うことが出来ます。「5 日以上古いファイルで、削除対象となるもの」を確認した場合の出力結果は以下の通りです。

1
2
3
4
5
6
$ tmpwatch -t -m 5d /home/user/test
removing file /home/user/test/test15.txt
removing file /home/user/test/test16.txt
removing file /home/user/test/test17.txt
removing file /home/user/test/test18.txt
removing file /home/user/test/test19.txt

テストしただけですので、ファイルは削除されていません。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ ls -l
total 0
-rw-rw-r-- 1 user user 0 Jul 15 00:00 test15.txt
-rw-rw-r-- 1 user user 0 Jul 16 00:00 test16.txt
-rw-rw-r-- 1 user user 0 Jul 17 00:00 test17.txt
-rw-rw-r-- 1 user user 0 Jul 18 00:00 test18.txt
-rw-rw-r-- 1 user user 0 Jul 19 00:00 test19.txt
-rw-rw-r-- 1 user user 0 Jul 20 00:00 test20.txt
-rw-rw-r-- 1 user user 0 Jul 21 00:00 test21.txt
-rw-rw-r-- 1 user user 0 Jul 22 00:00 test22.txt
-rw-rw-r-- 1 user user 0 Jul 23 00:00 test23.txt
-rw-rw-r-- 1 user user 0 Jul 24 00:00 test24.txt

tmpwatch で実際に古いファイルを削除してみる

現在時刻を確認しておきます (7/24 です)。

1
2
$ date
Sun Jul 24 21:00:22 JST 2016

tmpwatch を使って 5 日以上古いファイルは削除してみます。

1
2
$ tmpwatch -m 5d /home/user/test
$

結果を確認します。意図通り、5 日以上経過している古いファイルは削除されています。

1
2
3
4
5
6
7
$ ls -l
total 0
-rw-rw-r-- 1 user user 0 Jul 20 00:00 test20.txt
-rw-rw-r-- 1 user user 0 Jul 21 00:00 test21.txt
-rw-rw-r-- 1 user user 0 Jul 22 00:00 test22.txt
-rw-rw-r-- 1 user user 0 Jul 23 00:00 test23.txt
-rw-rw-r-- 1 user user 0 Jul 24 00:00 test24.txt

実際には cron で定期処理として実行する... といった使い方が「あるあるパターン」かも知れません。