このコマンドを確認してもよろしいですか?ファイルと現在のディレクトリ自体を削除しています。スクリプトはcronを介して実行されます。
目次:
/log/dir/
/log/dir/tmp/
スクリプトのコマンド:
find /log/dir/ -mtime +7 -name "*" -exec rm -rf {} \;
find /log/dir/tmp -mtime +7 -name "*" -exec rm -rf {} \;
テスト:実行してfind /log/dir/ -mtime +7 -name "*"
ファイルを確認し、結果を得ました。スクリプトを実行すると、ファイルが削除されます。数日後、フォルダも削除されました(dir in/log/dir/
とtmp in /log/dir/tmp
)。
指定されたパス内で7日より古いファイル/ディレクトリのみを削除する必要があります。
LinuxRedhat6.5
ベストアンサー1
ディレクトリではなく通常のファイルのみを削除するには、find
必ずを使用する必要があります-type f
。これにより、ディレクトリ(または非正規ファイル)を参照するパス名は処理されません。最後の修正タイムスタンプが削除基準を満たして以来、ディレクトリが削除されました。
また、ファイルを削除したい場合rm -r
でも、通常のファイルを繰り返す必要がないので使用しないでください。ほとんどの実装では、代わりにfind
使用することを選択できます。-delete
-exec rm
これは-name "*"
機能せず、次の理由で削除できます。すべて名前が一致します*
。
findを実行すると、後者は前者の一部として扱われるため、/log/dir
実行する必要はありません。/log/dir/tmp
サブディレクトリではなくこれら2つのディレクトリのみを表示したい場合は-maxdepth 1
(find
サポートされている場合)に追加してください。する個別に処理する必要があります(ただし、find
ユーティリティには複数の最上位ディレクトリが必要なため、これは単一の呼び出しで実行できます)。
達成しようとする目標に基づく推奨事項:
find /log/dir /log/dir/tmp -maxdepth 1 -type f -mtime +7 -delete
mtime
ディレクトリにファイルが追加または削除されると、ディレクトリの目次が更新されます。だから削除しようとしたかどうかはわかりません。目次最後に変更されたタイムスタンプに基づいてお勧めします。
logrotate
ログファイルを循環させるには、cronジョブまたは同様のユーティリティを使用することも検討できます。