Twitter RSS
| |

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% [?]

Comentarii pentru “Argument list too long”

  • Confuzius spune:

    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 :D

    Nice explanation, mersi!

  • Marius spune:

    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

Ai intrebari?

Reclama
Categorii
Apache
Articole si tutoriale legate de serverul web Apache.
/articole-tutoriale-apache/

cPanel
Articole si tutoriale legate de utilizarea si administrarea sistemului de gestiune a serverelor de hosting, cPanel.
/articole-tutoriale-cpanel-whm/

DNS
Vezi toate articolele din categoria DNS
/dns-bind-domain-name-services/

Linux
Articole si tutoriale legate de Linux, sisteme BSD sau alte sisteme de operare din familia UNIX.
/articole-tutoriale-linux/

Mail
Vezi toate articolele din categoria Mail
/mail/

MySQL
Articole si tutoriale despre serverul de baze de date MySQL.
/articole-tutoriale-optimizare-mysql/

Perl
Vezi toate articolele din categoria Perl
/perl-practical-extraction-and-report-language/

PHP
Vezi toate articolele din categoria PHP
/php-language-hypertext-preprocessor/

Virtualizare
Articole si tutoriale despre virtualizare si sistemel virtuale create cu Xen sau OpenVZ.
/virtualizare-xen-openvz/

Webmin / Virtualmin
Articole si tutoriale legate de sistemul de gestiune gratuit Webmin sau modulul Virtualmin.
/webmin-virtualmin/





Newsletter
LAMP Recomandã
NetHelp
SRV.ro
ABCDomenii