Usuń pliki starsze niż 500 dni


10

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 findnie mogę ich obsłużyć. Ale nawet jeśli podam, że mam +2000ponad 3 lata, nadal to dostaję.

Czego tu brakuje?


Odpowiedzi:


18

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. Jednak finddomyślnie będzie się powtarzał w podkatalogach, więc nie trzeba w ogóle używać glob:

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

-deletejest niestandardowym predykatem. Jeśli twoja findimplementacja go nie obsługuje, możesz użyć:

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

zamiast.


Dziękuję, ale teraz dostałem to: find: invalid predicate -delete
Garg

1
@Garg najpierw przepraszam, właśnie skopiowałem twoje polecenie i nie zauważyłem, że twoja składnia jest nieprawidłowa. -deleteNie bierze {}. Zobacz aktualizację. Jednak twój komunikat o błędzie wydaje się sugerować, że twoja wersja findnie obsługuje -delete. Jeśli nie używasz GNU find(czego w większości przypadków nie zrobisz, chyba że używasz Linuksa), musisz użyć -exec -rm {} \;zamiast tego.
terdon

Dziękuję Ci. -exec rm {} \;Zrób sztuczkę.
Garg

1
@ Hobbs Nie rozumiem, dlaczego nie, -execjest zdefiniowany przez POSIX .
terdon

@terdon mój błąd.
hobbs
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.