2008/12/25 Tarhon-Onu Victor <mi...@iasi.rdsnet.ro>:
> On Sat, 20 Dec 2008, Petru Ratiu wrote:
>
>> Solutiile pe care le vad acum sunt fie redefinirea IFS, fie find |
>> while read , fie find -print0 | xargs -0 , fie alte solutii non-bash.
>>
>> PS: `ls *.avi` e din categoria useless use of cat, *.avi era fix la
>> fel (caz in care in scriptul de mai sus apare o surpiza placuta pe
>> care n-o desconspir acum).
>
>        Desi devenim offtopic, aici ar fi mai multe de spus. Daca lista de
> fisiere e "suficient" de lunga, for-ul ala oricum l-ai face o sa plesneasca.
>        La "for file in *.avi" te poti trezi ca lista e prea lunga, sau la
> "for file in $(ls -1 *.avi)" te poti trezi ca-ti inghite bash-ul o droaie de
> ram, iar daca fisierele contin $IFS o sa te trezesti ca la mencoder
> ajung ca argumente bucati din numele fisierelor.
>
>        Solutiile ideale aici atit dpdv. al eficientei cit si a
> scalabilitatii cred ca ar fi:
> 1. find . -name \*.avi -exec mencorer tralala sau find -print | xargs
> sau, mai putin ideal:
> 2. ls -1 *.avi | while read FISIER; do
>        treaba_cu_mencoderu' "$FISIER";
> done;
>
>        Solutia 2 e si ea vulnerabila la problema cu "lista suficient de
> lunga", insa daca e sub pragul limita dar lista e suficient de mare macar nu
> dai in problema cu memoria.
>

Ca sa caut nod in papura, ls -1 iar e degeaba, pentru ca daca stdout
nu e un terminal, comportamentul default e un fisier pe linie oricum.
Evident ca se stie ca cea mai buna solutie e find -print0 | xargs -0
(si pentru comenzi mai complicate, xargs mai stie si de -L1 sau -I
etc.).

Merry xargs-mas!

-- 
  "Unix was written to play Spacewar and cheat at Scrabble,
   but Linux was created merely to prove that it booted." - a.s.r. quote

_______________________________________________
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui