私のディレクトリには2010年のファイルが含まれています。 500日を過ぎたすべてのファイルを削除したいと思います。以下を試しました。
find /var/log/arc/* -type f -mtime +500 -delete {}\;
しかし、私はそれを理解します:
-bash: /usr/bin/find: Argument list too long
私が知っている限り、これはファイルが多すぎてfind
処理する方法がないことを意味します。しかし、+2000
3年以上の時間を投資した後もまだこれを得ます。
私がここで何を見逃しているのでしょうか?
答え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日前に変更されたファイルと一致します。