このコマンドを確認してもよろしいですか?ファイルと現在のディレクトリ自体を削除しています。スクリプトは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ジョブまたは同様のユーティリティを使用することも検討できます。
答え2
「7日以上」が何を意味するのかを定義する必要があります。 7日以上前にアクセスしたり、7日以上前に変更したり、7日以上前に作成したりできます。すべての状況が異なります。また、ファイルを検討しますか?そして目次?
ファイルとディレクトリを削除したい場合は、2番目のコマンドは/log/dir/tmp
。/log/dir
この状況では、rmを使用することは-r
不注意な行動であり、意図したものよりも多くの内容が削除される可能性があります。 Findはすでにすべてのファイル/ディレクトリを再帰的に一覧表示しているため、再帰的に削除してfindの出力よりも先に進むことができます。しばらく待って、rm -f
削除するファイルのリストを見つけてください。
あなたがしたいことは簡単だと思います:find /log/dir/ -type f -ctime +7 -exec rm -f {} \;