【回答】
ファイルのタイムスタンプ(最終変更日時)を基準としてファイルを削除する方法を紹介します。
(Redhat EL 6.4で確認)
1.予備知識
find には mtime オプションがあり、タイムスタンプを指定して処理を行うことが出来ます。find はタイムスタンプベースの処理に向いています。
Redhat Linuxでは3種類のタイムスタンプが存在します。
atim 最終アクセス日時(ファイルの内容を出力など)
ctime 最終属性変更日時(ファイル名変更、オーナー変更、属性変更など)
mtime 最終変更日時
(*)ファイルの作成日時は記憶されません。
以下のコマンドで各タイムスタンプの確認が可能です。
(1)atimeの表示
ls -lu
(2)ctimeの表示
ls -lc
(3)mtimeの表示
ls -l
2. find で処理
find では mtime によりファイルの一覧を出力することが可能です。
find のmtime オプションは以下の通りです。
(1)本日〜<日数>
find -mtime -<日数>
例:
find -mtime -30
は本日から30日前
(2)<日数>〜<日数の1日前)
find -mtime <日数>
例:
find -mtime 30
は30日前から31日まで
(3)<日数>〜過去全て
find +mtime <日数>
例:
find +mtime 30
30日から古い日付
以下はカレントディレクトリの *.tmp というファイルに対して
60日を経過したファイルを一気に削除する。
# find ./ -name '*.tmp' -type f -mtime +60 | xargs rm -f
=============================================================
以下は実行のサンプルです。以下でテスト用ファイルを生成しました。
touch log0626.tmp -t 201506260000
touch log0627.tmp -t 201506270000
touch log0628.tmp -t 201506280000
touch log0629.tmp -t 201506290000
touch log0630.tmp -t 201506300000
touch log0701.tmp -t 201507010000
touch log0702.tmp -t 201507020000
touch log0703.tmp -t 201507030000
touch log0704.tmp -t 201507040000
touch log0705.tmp -t 201507050000
touch log0706.tmp -t 201507060000
touch log0707.tmp -t 201507070000
touch log0708.tmp -t 201507080000
60日前のファイルを削除 (9月2日に実行)
# find ./ -name '*.tmp' -type f -mtime +60 | xargs rm -f
# ll
合計 0
-rw-r--r-- 1 root root 0 7月 4 00:00 2015 log0704.tmp
-rw-r--r-- 1 root root 0 7月 5 00:00 2015 log0705.tmp
-rw-r--r-- 1 root root 0 7月 6 00:00 2015 log0706.tmp
-rw-r--r-- 1 root root 0 7月 7 00:00 2015 log0707.tmp
-rw-r--r-- 1 root root 0 7月 8 00:00 2015 log0708.tmp
9月2日から見て60日は7月2日。
7月2日以後のファイルが消えているのが分かります。
(*)本ページは Redhat Enterprise Linux 6以後を想定しています。
最終更新日:2015/10/30
[Redhat Enterprise linux 6(EL) FAQ トップへ]
[FAQ CENTER トップ]