500日を過ぎたファイルを削除

500日を過ぎたファイルを削除

私のディレクトリには2010年のファイルが含まれています。 500日を過ぎたすべてのファイルを削除したいと思います。以下を試しました。

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

しかし、私はそれを理解します:

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

私が知っている限り、これはファイルが多すぎてfind処理する方法がないことを意味します。しかし、+20003年以上の時間を投資した後もまだこれを得ます。

私がここで何を見逃しているのでしょうか?

答え1

findファイルリストが入力として必要でない場合がありません。問題は、globがあまりにも/var/log/arc/*多くのファイルに拡張されることです。しかし、findサブディレクトリへの繰り返しは基本的に行われ、globをまったく使用する必要はありません。

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

-delete非標準述語です。実装がそれをサポートしていない場合は、find次のものを使用できます。

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

代わりに。

答え2

免責事項:私は現在です生皮右回転)(望むよりhttps://github.com/raforg/rawhide)

あなたが逃しているのは探すディレクトリ(/var/log/arc)のみが必要であり、ディレクトリ()内のすべてのファイルは必要ありません/var/log/arc/*。 (そこにはいけませ/*{}\;)を削除すると問題が解決します。GNUを探す。雨GNUを探す-delete {}\;、にも変更する必要があります-exec /bin/rm '{}' \;

FWIW、代替探す私のものになる生皮右回転)プログラム。これにより、次のことができます。

rh -UUU /var/log/arc 'f && old(500*days)'

非常に似ていますが、短くて読みやすいです。

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

f(またはfile)は通常のファイルと一致します。

old(500*days)少なくとも500日前に変更されたファイルと一致します。

関連情報