株式会社レップワン運営サイト
株式会社レップワン
ネットワークインフラに特化したIT技術者の常駐サービスを提供しています。企業情報システムのノンストップ運用を支えています。
Replog!株式会社レップワン代表 福田兼児のブログです
株式会社レップワン代表 福田兼児のブログです。
Replog!株式会社株式会社レップワン マネージャーによるブログです
株式会社レップワン マネージャーによる公式ブログです。
Oneway Good Communication from Osaka Japan.
大阪近郊のおすすめ情報を英語で発信しています。
カテゴリー/Replog!byStaff

最新エントリー/Replog!byStaff

バックナンバー/Replog!byStaff

Mar
29
2009

"find" n日前より古いファイルをまとめて削除 @LCD -Linux Command Dictionary- 【山澤】

どうも、山澤です。

もういっちょ技術ネタ、LCDシリーズです。

お次は find ってコマンド。条件を指定してファイルやディレクトリを検索するコマンドで、検索結果を別のコマンドの引数として実行することが出来ます。

まぁ、使い方次第で色んなことが出来るんだけど、今回は find を使って n日以上古いファイルを検索してまとめて削除する方法について書いてみます。

**************************************************

■1.find の使い方

man を見ると書式は、
 
find [path...] [expression]


ってなっています。よーするに、

find [検索をするディレクトリのパス] [
オプション、判別式、及びアクションなど]

ですね。


■2.判別式

判別式は色々あるんだけど、日時関連のものは、

-atime (+/-)n
最後にアクセスしたのが n日前の file/dir を検索(+n:n日以上、-n:n日以下)

-ctime (+/-)n
最後にステータスが修正されたのが n日前の file/dir を検索(+n:n日以上、-n:n日以下)

-mtime (+/-)n
最後にデータが修正されたのが n日前の file/dir を検索(+n:n日以上、-n:n日以下)

とかがある。

ちなみに -amin , -cmin , -mmin だと分単位で n分前って感じで指定できます。まぁ、あんまり使うことないかなぁ。

で、「5日前より古いファイル」を指定する場合は「-mtime +5」「5日前より新しいファイル」を指定する場合は「-mtime -5」となります。

例えば、ホームディレクトリ直下にある120日前より古いファイルとかを検索したい場合はこう↓。

# find ~/* -mtime +120
/root/VMwareTools-1.0.8-126538.i386.rpm
/root/anaconda-ks.cfg
/root/install.log
/root/install.log.syslog


■3.アクション

次に検索結果を引数にして実行するのに -exec というアクションを使います。使い方は、

-exec [command] {} \;

例えば、上の例で検索した120日前より古いファイルの詳細な情報をみたい場合は、[command] の所に ls -l を入れます。

# find ~/* -mtime +120 -exec ls -l {} \;
-r--r--r--  1 root root 17631486 10月 31 09:37 /root/VMwareTools-1.0.8-126538.i386.rpm
-rw-r--r--  1 root root 1488 11月  8 02:23 /root/anaconda-ks.cfg
-rw-r--r--  1 root root 66252 11月  8 02:23 /root/install.log
-rw-r--r--  1 root root 33923 11月  8 02:23 /root/install.log.syslog


■4.n日前より古いファイルをまとめて削除してみる

まずは実験環境として、ホームディレクトリ以下に test ディレクトリを作って 3/25〜29 の日付ごとのファイルを作ります。

# pwd
/root
# mkdir test
# cd test/
# touch -t 200903291200 test.5.txt
# touch -t 200903281200 test.4.txt
# touch -t 200903271200 test.3.txt
# touch -t 200903261200 test.2.txt
# touch -t 200903251200 test.1.txt
# ls -l

合計 0
-rw-r--r--  1 root root 0  3月 25 12:00 test.1.txt
-rw-r--r--  1 root root 0  3月 26 12:00 test.2.txt
-rw-r--r--  1 root root 0  3月 27 12:00 test.3.txt
-rw-r--r--  1 root root 0  3月 28 12:00 test.4.txt
-rw-r--r--  1 root root 0  3月 29 12:00 test.5.txt

完成。さぁ実験開始です。

このディレクトリの中の 2日前より古いファイルを削除してみます。いきなり rm するのは危険なのでまずは検索だけして、目的の結果が得られたことを確認してから削除しましょう。

# find /root/test/ -mtime +2
/root/test/test.2.txt
/root/test/test.1.txt

今日は 29日なので 2日前の 27日よりも古いファイル、つまり 25、26日のファイルが出力されたので目的の結果が得られたことが確認できたので -exec で繋げて削除します。

# find /root/test/ -mtime +2 -exec rm -f {} \;
# ls -l /root/test/
合計 0
-rw-r--r--  1 root root 0  3月 27 12:00 test.3.txt
-rw-r--r--  1 root root 0  3月 28 12:00 test.4.txt
-rw-r--r--  1 root root 0  3月 29 12:00 test.5.txt

大成功です。


**************************************************

find コマンド便利ですね。ぜひ使いこなしてください。
2009年3月29日 コメント(1)トラックバック(0)
このエントリーのトラックバックURL

▼この記事に対するコメント

There is noticeably a lot to realize about this. I suppose you made various nice points in features also.

|投稿者:Roland Thomas|2011年1月20日 02:44|


コメント投稿
は必須項目です。(メールアドレスは公開されません)
名前
メールアドレス
URL
本文
レップワンスタッフブログ RSS登録