同様の質問を見つけましたが、完全に一致していませんでした。
バックアップディレクトリ(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+7
find
古い隠しファイルも削除するには、D
glob修飾子を追加してください。
一致するファイルがない場合は、エラーメッセージが表示されます。N
glob修飾子を追加することでこれを防ぐことができます(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
。