500日以上経過したファイルを削除する


10

2010年からのファイルを含むディレクトリがあります。500日より古いすべてのファイルを削除したいのですが、これを試しました。

find /var/log/arc/* -type f -mtime +500 -delete {}\;      

しかし、私はこれを得ます:

-bash: /usr/bin/find: Argument list too long

私が知っているように、これはファイルが多すぎてfindそれらを処理できないことを意味します。しかし、+20003年以上経過している場合でも、これを取得しています。

ここで何が欠けていますか?


回答:


18

find入力としてファイルのリストを必要としないものがありません。問題は、グロブ/var/log/arc/*が非常に多くのファイルに拡張することです。ただし、findデフォルトではサブディレクトリに再帰するため、グロブを使用する必要はまったくありません。

find /var/log/arc/ -type f -mtime +500 -delete

-delete非標準の述語です。find実装でサポートされていない場合は、以下を使用できます。

find /var/log/arc/ -type f -mtime +500 -exec rm -f {} +

代わりに。


ありがとうございますが、今これを取得しました:find: invalid predicate -delete'`
Garg

1
@Garg最初に申し訳ありませんが、コマンドをコピーしましたが、構文が間違っていることに気づきませんでした。-delete取ることはありません{}。更新を参照してください。ただし、エラーメッセージは、のバージョンがをfindサポートしていないことを示唆しているよう-deleteです。GNUを使用していない場合find(ほとんどの場合、Linuxを使用していない限り使用しません)、-exec -rm {} \;代わりに使用する必要があります。
terdon

ありがとうございました。-exec rm {} \;トリックを行います。
Garg

1
@hobbs理由はわかりませんが、POSIX-exec定義されています。
terdon

@terdon私の間違い。
ホッブズ2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.