- - PR -
1ヶ月前のファイルを削除するコマンド
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-30 11:06
みなさん、こんにちは。
どんたくおです。 今、一つのディレクトリログ内にログを溜めるようにしています。 ログは1日に15ファイルぐらいずつ作成されていきます。 先日、このディレクトリ内にファイルがたまりすぎていて、 ls で表示させるのに時間がかかるといわれました。 そこで、皆様にご質問したいのですが、コマンドで今日より1ヶ月前に作成されたファイルを全て削除するということは可能でしょうか。 perlでこそこそ処理してもいいのですが、もしコマンドでできればスマートかなと思い、ご質問させていただきました。 もし、そのような方法をご存知の方がおいでましたら、ご教授いただけると幸いです。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2005-11-30 11:45
こんにちは。
こんな感じで如何でしょう? [-mtime]オプションなので、「ファイルの作成」時ではなく 「ファイルの更新」時になってしまう点と、1ヶ月ではなく 30日という点が微妙に要件と異なりますが。 | ||||||||||||
|
投稿日時: 2005-11-30 11:45
変更されてから30日が過ぎたファイルを削除する例。
find 対象ディレクトリ -type f -mtime +30 -exec rm {} ¥; といってもいきなり実行せずに、まずは次のように -exec 以降を 取り払って実行して対象となるファイルをチェック。 find 対象ディレクトリ -type f -mtime +30 -ls 削除されるファイル群に間違いがないか、よく確認しましょう。 #うっかり消してしまってからでは遅すぎます | ||||||||||||
|
投稿日時: 2005-11-30 12:42
作成してから 30 日経ったファイルを無条件に削除:
find 対象ディレクトリ -type f -ctime +30 | xargs rm 一旦確認したい場合: (出力ファイル名は既存ファイルと衝突しなければ何でも可) find 対象ディレクトリ -type f -ctime +30 > filesToBeDeleted.txt (ここで filesToBeDeleted.txt の内容を確認) xargs rm < fileToBeDeleted.txt いかがでしょうか? | ||||||||||||
|
投稿日時: 2005-11-30 13:40
問題点がこれだけなんだったら、 「過去のログは別フォルダに移動」 って選択肢もありそうですね。 過去30日のログさえ残せてれば無問題、だったら別にいいんだけど、 削除自体が必須な状況では無いかと。 _________________ Mattun Microsoft MVP for Directory Services (Oct 2006-Sep 2007) | ||||||||||||
|
投稿日時: 2005-11-30 14:04
Utaさん
portulacaさん Gioさん ご返信いただきましてありがとうございます。 なるほど、findコマンドを組み合わせて実現できるのですね。 それにしてもfindコマンドは非常に便利ですね。 findは-exec grep オプションで、ファイル内の文字列検索をすると きにしようしていたのですが、ちょいと調べが足りませんでした。 あと、これは転ばぬ先の杖的なお話になるのですが、ファイル数が 多いと ls でディレクトリの一覧を表示させるのが遅いということで、今回皆様 にご教授いただきました。 やはり、Linuxのパフォーマンス的にも、1つのディレクトリにたくさん のファイルが存在するのはよくないことなのでしょうか。 当方、Linuxのあまり深い部分を理解しておらず申し訳ないです。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2005-11-30 15:41
> Mattunさん
確かに仰る通りですね。テープ等に定期的に保存しているのでなければ、 別のディレクトリに残しておく方が良いですね。 > Gioさん
[-ctime]オプションのcは「Create」ではなく「Change」ですので、 「作成してから」ではなく、「ファイルステータスが変化してから」の意味です。 具体的には、statコマンドの「Change」の値を基に判断されると記憶しています。 > どんたくおさん
単純にコンソールに表示する文字数が多過ぎて処理が遅くなっているだけだと思います。 提供するサービスのパフォーマンスには影響はないと思いますよ。 | ||||||||||||
|
投稿日時: 2005-11-30 15:54
こんにちは
解決済みのようですが、補足!! findを使う場合サブディレクトリも検索してしまうので注意したほうがいいですよ。 該当ディレクトリ内のみを消す場合は --maxdepth 1 を指定しましょう |