- PR -

1ヶ月前のファイルを削除するコマンド

投稿者投稿内容
どんたくお
ベテラン
会議室デビュー日: 2005/08/29
投稿数: 88
投稿日時: 2005-11-30 11:06
みなさん、こんにちは。
どんたくおです。

今、一つのディレクトリログ内にログを溜めるようにしています。
ログは1日に15ファイルぐらいずつ作成されていきます。
先日、このディレクトリ内にファイルがたまりすぎていて、
ls
で表示させるのに時間がかかるといわれました。

そこで、皆様にご質問したいのですが、コマンドで今日より1ヶ月前に作成されたファイルを全て削除するということは可能でしょうか。
perlでこそこそ処理してもいいのですが、もしコマンドでできればスマートかなと思い、ご質問させていただきました。

もし、そのような方法をご存知の方がおいでましたら、ご教授いただけると幸いです。


よろしくお願いします。
Uta
常連さん
会議室デビュー日: 2004/05/17
投稿数: 37
投稿日時: 2005-11-30 11:45
こんにちは。

コード:
rm `find /path/to/dir -mtime 30`



こんな感じで如何でしょう?
[-mtime]オプションなので、「ファイルの作成」時ではなく
「ファイルの更新」時になってしまう点と、1ヶ月ではなく
30日という点が微妙に要件と異なりますが。
portulaca
会議室デビュー日: 2005/11/30
投稿数: 12
投稿日時: 2005-11-30 11:45
変更されてから30日が過ぎたファイルを削除する例。
 find 対象ディレクトリ -type f -mtime +30 -exec rm {} ¥;

といってもいきなり実行せずに、まずは次のように -exec 以降を
取り払って実行して対象となるファイルをチェック。
 find 対象ディレクトリ -type f -mtime +30 -ls
削除されるファイル群に間違いがないか、よく確認しましょう。

#うっかり消してしまってからでは遅すぎます
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 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

いかがでしょうか?
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-11-30 13:40
引用:

先日、このディレクトリ内にファイルがたまりすぎていて、
ls
で表示させるのに時間がかかるといわれました。


問題点がこれだけなんだったら、
「過去のログは別フォルダに移動」
って選択肢もありそうですね。

過去30日のログさえ残せてれば無問題、だったら別にいいんだけど、
削除自体が必須な状況では無いかと。
_________________
Mattun
Microsoft MVP for Directory Services
(Oct 2006-Sep 2007)
どんたくお
ベテラン
会議室デビュー日: 2005/08/29
投稿数: 88
投稿日時: 2005-11-30 14:04
Utaさん
portulacaさん
Gioさん

ご返信いただきましてありがとうございます。


なるほど、findコマンドを組み合わせて実現できるのですね。
それにしてもfindコマンドは非常に便利ですね。
findは-exec grep オプションで、ファイル内の文字列検索をすると
きにしようしていたのですが、ちょいと調べが足りませんでした。

あと、これは転ばぬ先の杖的なお話になるのですが、ファイル数が
多いと
ls
でディレクトリの一覧を表示させるのが遅いということで、今回皆様
にご教授いただきました。
やはり、Linuxのパフォーマンス的にも、1つのディレクトリにたくさん
のファイルが存在するのはよくないことなのでしょうか。

当方、Linuxのあまり深い部分を理解しておらず申し訳ないです。


よろしくお願いします。
Uta
常連さん
会議室デビュー日: 2004/05/17
投稿数: 37
投稿日時: 2005-11-30 15:41
> Mattunさん
引用:
問題点がこれだけなんだったら、
「過去のログは別フォルダに移動」
って選択肢もありそうですね。

過去30日のログさえ残せてれば無問題、だったら別にいいんだけど、
削除自体が必須な状況では無いかと。


確かに仰る通りですね。テープ等に定期的に保存しているのでなければ、
別のディレクトリに残しておく方が良いですね。


> Gioさん
引用:
作成してから 30 日経ったファイルを無条件に削除:

find 対象ディレクトリ -type f -ctime +30 | xargs rm


[-ctime]オプションのcは「Create」ではなく「Change」ですので、
「作成してから」ではなく、「ファイルステータスが変化してから」の意味です。
具体的には、statコマンドの「Change」の値を基に判断されると記憶しています。


> どんたくおさん
引用:
やはり、Linuxのパフォーマンス的にも、1つのディレクトリにたくさん
のファイルが存在するのはよくないことなのでしょうか。


単純にコンソールに表示する文字数が多過ぎて処理が遅くなっているだけだと思います。
提供するサービスのパフォーマンスには影響はないと思いますよ。
jk
ベテラン
会議室デビュー日: 2005/08/19
投稿数: 94
投稿日時: 2005-11-30 15:54
こんにちは

解決済みのようですが、補足!!

findを使う場合サブディレクトリも検索してしまうので注意したほうがいいですよ。

該当ディレクトリ内のみを消す場合は

--maxdepth 1 を指定しましょう

スキルアップ/キャリアアップ(JOB@IT)