7日以上経過したファイルのみを削除する:-mtimeとfind

7日以上経過したファイルのみを削除する:-mtimeとfind

同様の質問を見つけましたが、完全に一致していませんでした。

バックアップディレクトリ(sql)があり、そのディレクトリから7日以上経過したすべてのファイルを削除し、すべてのサブディレクトリをそのままにしようとします。

これが私が持っているものです:

find /var/log/mbackups -mtime +7 -type f -delete

これが私が望むことを達成する正しい方法ですか?

答え1

コマンドは最上位ディレクトリを調べ/var/log/mbackups、すべてのサブディレクトリにドリルダウンして、7日の基準を満たすファイルを削除します。ディレクトリ自体は削除されません。

/var/log/mbackupsコマンドにディレクトリ内のファイルのみを確認させる場合サブディレクトリに入らないでください。、次の制限を追加する必要があります。

find /var/log/mbackups -maxdepth 1 -mtime +7 -type f -delete

通常、タスクを無害なものに置き換えてコマンドをテストできます。たとえばfind(ヒントとしてここでも必要です):-delete-print-depth-delete-depth

find /var/log/mbackups -depth -mtime +7 -type f -print

答え2

zshを使う:

rm -f /var/log/mbackups/*(.m+6)

それは次のとおりです。

rm -f /var/log/mbackups/*(.^m-7)

.非表示で過去7日間に変更されていない一般ファイルは削除されます。同様に、find次の整数日数に切り捨てられ、厳密に7より大きいファイルが一致するため、8日以上のファイルが一致します(使用時に一般的に発生するトラップ-mtime +7)。m+7find

古い隠しファイルも削除するには、Dglob修飾子を追加してください。

一致するファイルがない場合は、エラーメッセージが表示されます。Nglob修飾子を追加することでこれを防ぐことができます(rmファイル名引数なしで呼び出されますが、それを使用すると文句を言うべきで-fはありません)。

答え3

免責事項:私は現在生皮(rh)の著者です。https://github.com/raforg/rawhide)

ほとんど。非常に近い。試している正しいバージョンは次のとおりです。

find /var/log/mbackups -maxdepth 1 -mtime +6 -type f -delete

見つけたら探す述語-mtimeの引数は十分に直感的ではありません。生皮右回転)の代わりに:

rh -UUU -r /var/log/mbackups 'f && old(7*days)'

-UUU一致を切断/削除/削除します。

-rように探す-mindepth 1 -maxdepth 1検索パスより 1 つ下のレベルだけを検索するため、サブディレクトリは検索されません。

f一般ファイルを一致させます。

old(7*days)一致コンテンツは少なくとも7日前に最後に修正されました。

答え4

警告:-delete使用は非標準(非携帯用)であり、危険です gfind

rmいくつかのセキュリティ制限がありますが、マニュアルgfindページにはこれに言及していません-delete。したがって、正式な方法を使用することをお勧めします。

find /var/log/mbackups -mtime +7 -type f -exec rm {} +

これは、標準以外の方法を使用するよりも遅くはありません-delete

関連情報