find および rm コマンドは、ディレクトリ内のファイルとディレクトリ自体を削除します。

find および rm コマンドは、ディレクトリ内のファイルとディレクトリ自体を削除します。

このコマンドを確認してもよろしいですか?ファイルと現在のディレクトリ自体を削除しています。スクリプトは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 1findサポートされている場合)に追加してください。する個別に処理する必要があります(ただし、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 {} \;

関連情報