web-dev-qa-db-ja.com

X日以上経過したファイルを削除します+

フォルダー内の5日より古いファイルを削除するコマンドを見つけました

find /path/to/files* -mtime +5 -exec rm {} \;

しかし、そのフォルダ内のサブディレクトリに対してもどうすればよいですか?

158
Teddy291

Rmにパイプするときは、特別なファイル名(スペース、引用符)に注意してください。

安全な代替策があります--deleteオプション:

find /path/to/directory/ -mindepth 1 -mtime +5 -delete

それだけです。個別のrm呼び出しはありません。ファイル名を気にする必要はありません。

-delete-depth -printに置き換えて、このコマンドを実行する前にテストします(-delete-depthを意味します)。

266
basic6

このコマンドは、ファイルが多すぎる場合は機能しないことに注意してください。次のようなエラーが発生します。

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マニュアルを参照してください

18
Julius

それは同じだ。ファイルのプレフィックスではなく、親ディレクトリを指定するだけです。あなたの例では、それは:

find /path/to -type f -mtime +5 -exec rm {} \;

これにより、/path/toおよびそのサブディレクトリの下にある、5日より古いすべてのファイルが削除されます。

空のサブディレクトリを削除するには、上記の@Costasコメントを参照してください。

9
apaul

コメントするための十分なポイントがないため、回答として投稿します...

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とタイムスタンプでどのように機能するかについての関連する質問の この回答 も参照してください。

0
this