2012年10月19日金曜日

便利なfindコマンド!指定日より古いファイルを消すっ!(前編)

プログラム上でアップロードされた画像などは削除しないと
どんどん溜まっていってしまってHDDを圧迫する原因になったり、
想定外の動きになりプログラムが正常に動作しなくなってしまうことがあります。

それを防ぐために、定期的に必要なくなったファイルは消すか、
圧縮してバックアップファイルとして移動させておく必要が出来ます。

その際の手段として、findコマンドを使う方法になります。

検証用に、touchコマンドも使います。
touchコマンドはファイルのタイムスタンプ時間などを操作できるコマンドです。
未来の日付のファイルを作ったり出来ます( ゚д゚)
検証用に次のようなファイルを作成します。
#2011年11月10日 00時00分としてファイルを作成
touch -t 201111100000 /tmp/test/2011_1110_0000.txt

#2012年10月15日 09時15分としてファイルを作成
touch -t 201210150915 /tmp/test/2012_1015_0915.txt

#2012年10月16日 00時00分としてファイルを作成
touch -t 201210160000 /tmp/test/2012_1016_0000.txt
#2012年10月16日 09時15分としてファイルを作成
touch -t 201210160915 /tmp/test/2012_1016_0915.txt
#2012年10月16日 23時59分としてファイルを作成
touch -t 201210162359 /tmp/test/2012_1016_2359.txt

#2012年10月17日 00時00分としてファイルを作成
touch -t 201210170000 /tmp/test/2012_1017_0000.txt
#2012年10月17日 09時15分としてファイルを作成
touch -t 201210170915 /tmp/test/2012_1017_0915.txt
#2012年10月17日 01時15分としてファイルを作成
touch -t 201210170115 /tmp/test/2012_1017_0115.txt
#2012年10月17日 23時59分としてファイルを作成
touch -t 201210172359 /tmp/test/2012_1017_2359.txt

#2012年10月18日 00時00分としてファイルを作成
touch -t 201210180000 /tmp/test/2012_1018_0000.txt
#2012年10月18日 23時59分としてファイルを作成
touch -t 201210182359 /tmp/test/2012_1018_2359.txt

#2012年10月19日 00時00分としてファイルを作成
touch -t 201210190000 /tmp/test/2012_1019_0000.txt
#2012年10月19日 03時00分としてファイルを作成
touch -t 201210190300 /tmp/test/2012_1019_0300.txt
#2012年10月19日 23時59分としてファイルを作成
touch -t 201210192359 /tmp/test/2012_1019_2359.txt
作られたファイルを確認する
# date
2012年 10月 19日 金曜日 01:41:53 JST
# ls -alu /tmp/test/
合計 8
drwxrwxrwx  2 apache   apache   4096 10月 19 01:40 2012 .
drwxrwxrwt. 8 root     root     4096 10月 19 01:39 2012 ..
-rw-rw-r--  1 K1-admin K1-admin    0 11月 10 00:00 2011 2011_1110_0000.txt
-rw-rw-r--  1 K1-admin K1-admin    0 10月 15 09:15 2012 2012_1015_0915.txt
-rw-rw-r--  1 K1-admin K1-admin    0 10月 16 00:00 2012 2012_1016_0000.txt
-rw-rw-r--  1 K1-admin K1-admin    0 10月 16 09:15 2012 2012_1016_0915.txt
-rw-rw-r--  1 K1-admin K1-admin    0 10月 16 23:59 2012 2012_1016_2359.txt
-rw-rw-r--  1 K1-admin K1-admin    0 10月 17 00:00 2012 2012_1017_0000.txt
-rw-rw-r--  1 K1-admin K1-admin    0 10月 17 01:15 2012 2012_1017_0115.txt
-rw-rw-r--  1 K1-admin K1-admin    0 10月 17 09:15 2012 2012_1017_0915.txt
-rw-rw-r--  1 K1-admin K1-admin    0 10月 17 23:59 2012 2012_1017_2359.txt
-rw-rw-r--  1 K1-admin K1-admin    0 10月 18 00:00 2012 2012_1018_0000.txt
-rw-rw-r--  1 K1-admin K1-admin    0 10月 18 23:59 2012 2012_1018_2359.txt
-rw-rw-r--  1 K1-admin K1-admin    0 10月 19 00:00 2012 2012_1019_0000.txt
-rw-rw-r--  1 K1-admin K1-admin    0 10月 19 03:00 2012 2012_1019_0300.txt
-rw-rw-r--  1 K1-admin K1-admin    0 10月 19 23:59 2012 2012_1019_2359.txt

まず、よく使われる過去のファイルを対象に、検索したいと思います。

※現在の時刻は「2012年 10月 19日 金曜日 01:41:53 JST」前後で実行しています
■現在の時間から24時間より前に作られたファイルを対象に検索
# find /tmp/test/* -mtime +0
/tmp/test/2011_1110_0000.txt
/tmp/test/2012_1015_0915.txt
/tmp/test/2012_1016_0000.txt
/tmp/test/2012_1016_0915.txt
/tmp/test/2012_1016_2359.txt
/tmp/test/2012_1017_0000.txt
/tmp/test/2012_1017_0115.txt
/tmp/test/2012_1017_0915.txt
/tmp/test/2012_1017_2359.txt
/tmp/test/2012_1018_0000.txt
■現在の時間から48時間より前に作られたファイルを対象に検索
find /tmp/test/* -mtime +1
/tmp/test/2011_1110_0000.txt
/tmp/test/2012_1015_0915.txt
/tmp/test/2012_1016_0000.txt
/tmp/test/2012_1016_0915.txt
/tmp/test/2012_1016_2359.txt
/tmp/test/2012_1017_0000.txt
/tmp/test/2012_1017_0115.txt
となります。

気をつける点として、コマンドを実行した時間を基準に24時間単位で過去を指定していく点になります。
上記のやり方ですと、時間単位になってしまいますので、
わかりにくい場合には日付を基準にして検索する事も可能です(1日の00時00分を基準にする)
■19日の00時00分より前のファイルを対象に検索
# find /tmp/test/* -daystart -mtime +0
/tmp/test/2011_1110_0000.txt
/tmp/test/2012_1015_0915.txt
/tmp/test/2012_1016_0000.txt
/tmp/test/2012_1016_0915.txt
/tmp/test/2012_1016_2359.txt
/tmp/test/2012_1017_0000.txt
/tmp/test/2012_1017_0115.txt
/tmp/test/2012_1017_0915.txt
/tmp/test/2012_1017_2359.txt
/tmp/test/2012_1018_0000.txt
/tmp/test/2012_1018_2359.txt
■18日の00時00分より前のファイルを対象に検索
# find /tmp/test/* -daystart -mtime +1
/tmp/test/2011_1110_0000.txt
/tmp/test/2012_1015_0915.txt
/tmp/test/2012_1016_0000.txt
/tmp/test/2012_1016_0915.txt
/tmp/test/2012_1016_2359.txt
/tmp/test/2012_1017_0000.txt
/tmp/test/2012_1017_0115.txt
/tmp/test/2012_1017_0915.txt
/tmp/test/2012_1017_2359.txt
個人的にはこっちのが直感的に分かりやすくて好きです(´∀`*)ポッ
次は-mtimeの-(マイナス)の場合についてになります
-mtimeのプラスの場合には、+に指定した数値分だけ過去のファイルを全て対象にしていましたが、
-の場合には、その逆で指定した日付から未来までのファイルを対象にします。

■未来のファイルを対象に検索
# find /tmp/test/* -mtime -0
/tmp/test/2012_1019_0300.txt
/tmp/test/2012_1019_2359.txt
■24時間以内に作られたファイルを対象に検索
# find /tmp/test/* -mtime -1
/tmp/test/2012_1018_2359.txt
/tmp/test/2012_1019_0000.txt
/tmp/test/2012_1019_0300.txt
/tmp/test/2012_1019_2359.txt
これに-daystartをつけると、
■20以降の00時00分(20日から未来まで)を対象に検索?
# find /tmp/test/* -daystart -mtime -0
■19日以降に作られた(19日から未来まで)を対象に検索
# find /tmp/test/* -daystart -mtime -1
/tmp/test/2012_1019_0000.txt
/tmp/test/2012_1019_0300.txt
/tmp/test/2012_1019_2359.txt
になります。

次回は、今回利用したfindコマンドで検索にマッチしたファイルを削除したり、移動させたりしてみたいと思います(`・ω・´)ゞビシッ!!
参考URL

0 件のコメント:

コメントを投稿