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