Mam katalog z plikami z 2010 roku. Chcę usunąć wszystkie pliki starsze niż 500 dni i próbowałem:
find /var/log/arc/* -type f -mtime +500 -delete {}\;
Ale dostaję to:
-bash: /usr/bin/find: Argument list too long
Jak wiem, oznacza to, że plików jest zbyt wiele i find
nie mogę ich obsłużyć. Ale nawet jeśli podam, że mam +2000
ponad 3 lata, nadal to dostaję.
Czego tu brakuje?
Odpowiedzi:
Tęsknisz za tym,
find
że nie potrzebujesz listy plików jako danych wejściowych. Problem polega na tym, że glob/var/log/arc/*
rozszerza się do zbyt wielu plików. Jednakfind
domyślnie będzie się powtarzał w podkatalogach, więc nie trzeba w ogóle używać glob:-delete
jest niestandardowym predykatem. Jeśli twojafind
implementacja go nie obsługuje, możesz użyć:zamiast.
źródło
find: invalid predicate
-delete-delete
Nie bierze{}
. Zobacz aktualizację. Jednak twój komunikat o błędzie wydaje się sugerować, że twoja wersjafind
nie obsługuje-delete
. Jeśli nie używasz GNUfind
(czego w większości przypadków nie zrobisz, chyba że używasz Linuksa), musisz użyć-exec -rm {} \;
zamiast tego.-exec rm {} \;
Zrób sztuczkę.-exec
jest zdefiniowany przez POSIX .