czwartek, 6 stycznia 2011

rm -rf , argument list too long

Często spotykam się z takim problemem, multum plików np. z sesjami i nikt ich nie czyścił.
Klient łączy się za pomocą klienta FTP z serwerem przechodzi do katalogu, w którym ma np. 200 000 plików z sesjami Joomli i szerzy zgorszenie, że mu połączenie zrywa.
Gdy chcemy później usunąć te pliki i dajemy rm -f tmp/* pojawia się właśnie komunikat "argument list too long".
Mam dwie metody rozwiązania tego problemu:
- uruchamiamy mc (Midnight Commande) zaznaczamy wszystkie pliki i dajemy usuń,
- przechodzimy do katalogu w którym znajdują się pliki i wprowadzamy ls | xargs rm -f.
Dlaczego nie stosuję opcji rm -rf, ponieważ wolę nie ryzykować jeśli coś zrobię nie tak to przy samej opcji -f usunie mi tylko pliki, ale gdy dam -rf to usunie mi również katalogi (takiej sytuacji wolałbym uniknąć).
Jeżeli podczas usuwania plików pojawi się komunikat błędu is a directory to można tego uniknąć przez:
ls | grep -v nazwa_katalotu | xargs rm -f

Przełącznik -v dla polecenie grep oznacza, że zostaną wypisane wszystkie wyniki, oprócz tych zawierających wyraz umieszczony po grep -v.
Istnieją również inne sposoby usuwania dużej ilości plików, niektórzy korzystają do tego celu z find + exec lub find + delete. Opisane powyżej metody nigdy mnie nie zawiodły więc postanowiłem nie rozdrabniać się więcej nad rm -f.

Brak komentarzy:

Prześlij komentarz