O problema de care m-am lovit destul de des e eroarea “Argument list too long” in cazul in care vreau sa sterg mai multe fisiere dintr-un anumit director. De exemplu, pe un server se intampla sa apara in “/tmp” foarte multe fisiere cu numele “pThumbxxxxxxx“, fisiere create de un script conceput prost. Daca incerc sa le sterg din shell primesc eroarea “Argument list too long“:
[root@8vx4USpd /tmp]# rm -f pThumb* bash: /bin/rm: Argument list too long [root@8vx4USpd /tmp]#
Eroarea apare pentru ca comanda “rm” nu suporta un numar foarte mare de parametri. Exista cateva solutii pentru problema asta. Cea mai simpla e sa folosim comanda “find“:
[root@8vx4USpd /tmp]# find /tmp -name "pThumb*" -delete
O alta solutie care o putem aplica in cazul in care ne intereseaza sa verificam diferiti parametri ai fisierelor e sa folosim o “bucla for“:
[root@8vx4USpd /tmp]# export fisiere=`ls` [root@8vx4USpd /tmp]# for fisier in $fisiere > do > rm -f $fisier > done .................................. [root@8vx4USpd /tmp]#
Avantajul acestei metode e ca inainte de “rm -f $fisier” putem alege sa facem unele verificari. De exemplu putem verifica marimea fisierului cu “ls -al nume.fisier“, putem verifica data crearii, modificarii sau a ultimei accesari cu “stat nume.fisier” sau putem face orice alte modificari care ar putea sa decida daca acel fisier trebuie sters sau nu.
O alta metoda la fel de draguta ca cea anterioara si care are aceleasi avantaje e crearea unei functii care sa faca toate verificarile pentru noi si sa initieze o anumita actiune. Un exemplu ar fi urmatorul:
[root@8vx4USpd /tmp]# function sterge() > { > while read linie; do > rm -f $linie > done > } [root@8vx4USpd /tmp]# ls | sterge
Ca in cazul anterior putem inainte de “rm -f $linie” sa adaugam diferite verificari. Avantajul mare fata de metoda anterioara e ca odata ce am declarat functia putem sa o folosim mai departe fara a fi nevoie sa o rescriem de fiecare data. De asemenea, functia poate fi inclusa si fi fisierul de initializare al shellului folosit – ex. “.bashrc“.
Popularity: 2% [?]



Interesant. Mi-am luat un hdd mai mare acuma si am sa imi instalez si eu un ubuntu sau ceva, sa ma mai joc putin
Nice explanation, mersi!
Sau poți folosi “ls | xargs rm -f ” și ai scăpat de orice bătaie de cap
am avut și eu aceeași problema pe un server și am făcut chiar și un mic bash script care il rulez cu cron
#!/bin/bash
cd /tmp
ls | xargs rm -f