Ce ne facem cand avem de sters multe fisiere dintr-un dir?
Poate ca unii vor spune rm -rf nume_director
Eu am intalnit o situatie aparte: fisierele nu erau organizate in subdirectoare :). Poate unii stiti ca in kern elul de unix, fie el Linux sau FreeBSD exista o limita pentru numarul de argumente pe care le poate primi o comanda. Astfel rm -rf * se traduce prin rm -rf fisier1 fisier2 … Foarte OK. Pana cand numarul de fisiere depaseste maximul numarului de argumente ce poate fi dat unei comenzi. (Bineinteles ca as putea castiga un argument in plus daca as elimina “-rf”, dar evident asta e o gluma.)
Eroarea care ne loveste e: rm: Argument list too long. (error code: 126).
Eu am dat peste problema aceasta incercand sa sterg fisierele dintr-un inbox imap virtual, Maildir/.Trash/cur
Evident ca nici enumerarea directorului nu reuseste, asa ca thunderbird crapa :P.
Am gasit ca e timpul sa pun de un script. Si mi-am spus ca deoarece numele fisierelor e format din numere, as putea sa sterg recursiv pe grupe fisierele.
Iata scriptul:
#!/bin/bash
rec(){
for I in `seq 0 9 `; do
echo $1$I
rm -rf ./$1$I*
[ $? -eq 126 ] && rec $1$I
done
}rec 1198
EOF
Autor:Sorin
Astept comentariile voastre pe tema asta si o solutie mai eficienta, daca se incumeta cineva. :)
In viitor ar trebui sa scrii si parametrii comenzii, adica exemple prin care pot folosi scriptul si cei care nu stiu Bash
Salut Sorin,
Cred ca cel mai simplu este asa:
for i in `find director/ -type f`;do rm -rf $i;done
find /dir/subdir | xargs -n100 rm -f
apropo… cand incerci sa stergi foarte multe fisiere ( am sters odata 400 de milioane de fisiere ) o sa ai probleme cu hdd-ul ( freeze ) daca nu cumva ai ssd…