On Monday 12 March 2007 15:17:00 Tarhon-Onu Victor wrote:
> On Mon, 12 Mar 2007, Mihai Maties wrote:
> > Deci, pana la urma, care dintre cele 3 metode e mai eficienta ?
> >
> > Raspunsul este absolut logic pentru ca in al treilea caz se executa _o
> > singura_ instanta a comenzii 'rm' cu 10000 de argumente in loc de 10000
> > de instante 'rm' cu cate un argument. Bineinteles, daca erau mai multe
> > fisiere
>
> Da, dar linia nu poate sa depaseasca o anumita lungime, parca era
> 32k. Iar in cazul lui s-ar putea sa depaseasca.
Pai de aia se foloseste xargs, pentru ca xargs _stie_ sa se foloseasca de
lungimea maxima a listei de argumente. Daca lista e prea mare atunci xargs va
crea mai multe comenzi succesive, dar _tinand cont de lungimea maxima
permisa_.
e.g.:
# xargs --show-limits
Your environment variables take up 1111 bytes
POSIX lower and upper limits on argument length: 2048, 129024
Maximum length of command we could actually use: 127913
Size of command buffer we are actually using: 127913
# find . -type f | wc
10000 10000 1918890
# find . -type f | xargs | wc -l
16
(vor fi create 16 comenzi succesive pentru a trata multitudinea de
argumente)
Iar rezultatul acela 16 se obtine din rotunjirea prin adaos a rezultatului
(1918890+9999) / 127913 = 15.079. Adica (numarul de octeti total din numele
fisierelor + numarul de spatii necesar separarii a 10000 de nume de
fisiere) / lungimea maxima a listei de argumente.
Mihai
PS: Claudiu, tu tot nu ai inteles ?
_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug