フォルダー内の5日より古いファイルを削除するコマンドを見つけました
find /path/to/files* -mtime +5 -exec rm {} \;
しかし、そのフォルダ内のサブディレクトリに対してもどうすればよいですか?
Rmにパイプするときは、特別なファイル名(スペース、引用符)に注意してください。
安全な代替策があります--deleteオプション:
find /path/to/directory/ -mindepth 1 -mtime +5 -delete
それだけです。個別のrm呼び出しはありません。ファイル名を気にする必要はありません。
-delete
を-depth -print
に置き換えて、このコマンドを実行する前にテストします(-delete
は-depth
を意味します)。
このコマンドは、ファイルが多すぎる場合は機能しないことに注意してください。次のようなエラーが発生します。
bash: /usr/bin/find: Argument list too long
コマンドラインの長さに関するexecシステムコールの制限を超えたことを意味します。そのようにrmを実行する代わりに、 xargs を使用する方がはるかに効率的です。これが機能する例です:
find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm
これにより、/ root/Maildir /の下で14日以上前に変更されたすべてのファイル(タイプf)がそこから再帰的に削除されます(概念1)。 その他のオプションについては、findマニュアルを参照してください 。
それは同じだ。ファイルのプレフィックスではなく、親ディレクトリを指定するだけです。あなたの例では、それは:
find /path/to -type f -mtime +5 -exec rm {} \;
これにより、/path/to
およびそのサブディレクトリの下にある、5日より古いすべてのファイルが削除されます。
空のサブディレクトリを削除するには、上記の@Costasコメントを参照してください。
コメントするための十分なポイントがないため、回答として投稿します...
find
が実際に-mtime
の引数を解釈する方法には微妙な点があります。
find /path/to/files* -mtime +5 -delete
5日以上経過したファイル、つまり6日以上6日以上経過したファイルを削除します。実際に「5日以上」古いファイルを削除するには
find /path/to/files* -mtime 5 -delete
-mtime
は、指定された数値に24を掛けることで時間で機能し、分数も使用できるため、-mtime 0.5
は12時間より古いファイルを削除します。
find
とタイムスタンプでどのように機能するかについての関連する質問の この回答 も参照してください。