Jeśli próbujesz usunąć bardzo dużą liczbę plików jednocześnie (dzisiaj usunąłem katalog z 485,000+), prawdopodobnie wystąpi ten błąd:
/bin/rm: Argument list too long.
Problem polega na tym, że gdy coś wpiszesz rm -rf *
, *
zostanie zastąpione listą każdego pasującego pliku, na przykład „rm -rf plik1 plik2 plik3 plik4” i tak dalej. Do przechowywania tej listy argumentów przydzielono stosunkowo mały bufor pamięci, a jeśli zostanie ona zapełniona, powłoka nie uruchomi programu.
Aby obejść ten problem, wiele osób użyje polecenia find do znalezienia każdego pliku i przekaże je pojedynczo do polecenia „rm” w następujący sposób:
find . -type f -exec rm -v {} \;
Mój problem polega na tym, że musiałem usunąć 500 000 plików i trwało to zbyt długo.
Natknąłem się na znacznie szybszy sposób usuwania plików - polecenie „find” ma wbudowaną flagę „-delete”! Oto, co wykorzystałem:
find . -type f -delete
Korzystając z tej metody, usuwałem pliki z prędkością około 2000 plików na sekundę - znacznie szybciej!
Możesz także wyświetlać nazwy plików podczas ich usuwania:
find . -type f -print -delete
… Lub nawet pokaż, ile plików zostanie usuniętych, a następnie określ, ile czasu zajmuje ich usunięcie:
root@devel# ls -1 | wc -l && time find . -type f -delete
100000
real 0m3.660s
user 0m0.036s
sys 0m0.552s