- ベストアンサー
一定期間過ぎたファイルを削除
CentOSを利用したwebサーバ(専用サーバ)をレンタルで利用しています。 コントロールパネルとしてPleskがインストールされています。 現在、某アクセス解析ソフトを利用しているのですが、そのログファイルがデフォルトでは1年分くらい保存されています。 しかし、そのためにサーバ容量を圧迫しているので、数ヶ月分だけ取っておいて、あとは自動で削除されるようにしたいです。 知り合いに聞いたところ、以下のコマンドを紹介されました。 find /var/www/vhosts -iregex ".*/httpdocs/cgi/acc/logs/*.log" -mtime +120 -exec rm -f {} /; これで、120日以上経ったファイルは削除するはずですよね? しかし、logsのフォルダには120日以上前のファイルが保存されています。 これは、何が悪いのでしょうか? また、これがなぜ動かないかを確認する方法はありますか? 教えてもらった人に連絡を取ろうとしたのですが、現在連絡が取れずちょっと困ってます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> これがなぜ動かないかを確認する方法はありますか? 紹介されたコマンドでは find /var/www/vhosts -iregex ".*/httpdocs/cgi/acc/logs/*.log" -mtime +120 -print を実行して表示されるファイル (ファイル名が .*/httpdocs/cgi/acc/logs/*.log に一致し、 120 日以上変更されていないファイル)が削除されます。 このコマンドを実行し何が表示されるか見てください。 おそらく ファイル名の指定を .*/httpdocs/cgi/acc/logs/.*\.log に 変えるとよいのだと思います。 いずれにしろ、表示されるファイルが削除されるので、削除したいログ ファイル以外のものが表示されないことをよく確認されるのがよいでしょう。
その他の回答 (1)
- sshiba
- ベストアンサー率69% (73/105)
-iregexのオプションに与えている正規表現をダブルクォート(")で括っているのが原因で シェルで"*"が展開されてからfindコマンドに渡されちゃってるのではないでしょうか。 findコマンドにオプションとして正規表現を渡したいのであれば、 シングルクォート(')で括ってシェルの解釈を抑止させるか、 ダブルクォート(")で括る必要があるのでしたら、シェルで正規表現として解釈される アスタリスク文字(*)は"\"でエスケープする必要がありますよ。 要は下記のどちらか。 find /var/www/hosts -iregex '.*/httpdocs/cgi/acc/logs/*.log' -mtime +120 -exec rm -f {} \; find /var/www/hosts -iregex ".\*/httpdocs/cgi/acc/logs/\*.log" -mtime +120 -exec rm -f {} \; ちなみに、t-okuraさんも指摘されている通り、実行前には"-exec rm -f {} \"をいきなり 実行するのは避けて、-printオプションでヒットするファイル名を確認してから 削除するようにした方がいいだろうと思います。
お礼
自己解決です。 コピペした物に改行か空白が含まれていたようで、手打ちしたところ無事動作しました。
補足
返答ありがとうございます。 また、返事が遅くなってすみません。 find /var/www/vhosts -iregex ".*/httpdocs/cgi/acc/logs/.*\.log" -mtime +120 -print を実行したところ、ちゃんと消したいファイルが表示されました。 と言うことで、PleskのCrontabに find /var/www/vhosts -iregex ".*/httpdocs/cgi/acc/logs/.*\.log" -mtime +120 -exec rm -f {} /; を入力し、以下の設定にしました。 分 : 30 時 : * 月次による日指定 : * 月 : * 週次による日指定 : * これだと、毎時30分になったら実行ですよね? しかし、時間になっても変化なしです。 自分のPCの時間ではなく、サーバの時間(システム日時)でも確認してみましたが、やはり変化なしです。 あとどこをチェック・修正したらよいでしょうか?