Newsgroup: it.comp.os.linux.iniziare
Titolo: aiuto costruzione comando for

ciao a tutti devo estrarre l'audio da diversi files mp4
 
per un singolo file do il comando
 
mencoder -of rawaudio -ovc copy -oac mp3lame -o output.mp3 input.mp4
 
e funziona...
 
ma non riesco a costruire un comando che converta tutti i file mp4 di 
una cartella dando all'output un nome diverso per ogni file... 
riuscireste ad aiutarmi?
 
grazie!

 riuscireste ad aiutarmi?
 
Riusciremmo, ma prima devi dire che istruzioni hai usato e che errore 
ottieni. Hai già scritto che vuoi usare for, hai controllato come si usa 
nella tua shell con "help for"?


buttato giù di getto:
 
find /path/dei/file  -name '*.mp4' |
while read i; do
  mencoder -of rawaudio -ovc copy -oac mp3lame -o ${i%.*}.mp3 $i
done
 

 riuscireste ad aiutarmi?
 
Usa find. Qualcosa come:
 
$ find $tuadirectory -maxdepth 1 -type f -name "*.mp4" -execdir mencoder -of rawaudio -ovc copy -oac mp3lame -o '{}'.output.mp3 '{}' \;
 
 
Se vuoi per forza usare un ciclo (e perché?), invece che da find
potresti partire da ls.
*Nota* *bene*: usare ls per creare un insieme di nomi di file, poi da
ciclare, è voler mettere il culo nelle pedate!
Ma, così, dovrebbe essere sicuro (e sufficiente, se non hai file mp4
nascosti):
 
$ cd $tuadirectory
$ ls -1 *.mp4 | while IFS= read -r item; do [[ -f "$item" ]] && mencoder -of rawaudio -ovc copy -oac mp3lame -o "${item}.output.mp3" "$item"; done
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
_________________________________________________________________
Non sprecare i cicli idle della tua CPU, né quelli della tua GPU.
 
http://www.worldcommunitygrid.org/index.jsp
 
http://www.rnaworld.de/rnaworld/
 
http://home.edges-grid.eu/home/
 
 
http://www.gpugrid.net/
 


 
grazie funzia!!

 nascosti):
 
No, non è nè sicuro nè sufficiente quindi metti il find
 
 

Addi' 26 lug 2013, mamboo scrive:

Se io dovessi farlo per me, farei cosi'.
 
mkdir DESTINAZIONE
cd ORIGINE
for j in $(ls *.mp4); do ffmpeg -i $j DESTINAZIONE/$j.mp3; done
 
-- 
Tanti saluti
 

 for j in $(ls *.mp4); do ffmpeg -i $j DESTINAZIONE/$j.mp3; done
 
e iniziare quel comando semplicemente con
for j in *.mp4 ;
quali controindicazioni potrebbe comportare?
 
Aggiungo poi che sarebbe forse il caso (non me ne intendo molto ...) di 
mettere le virgolette a $j cosi` legge anche i nomi dei file con gli 
spazi.
 
 

 No, non è nè sicuro nè sufficiente quindi metti il find
 
L'*unico* problema è che con read di certo non si può gestire un 
eventuale newline all'interno di un pathname, perché read lo usa come 
limitatore. Adesso, senza troppi catastrofismi, vorrei ben contare quanti 
file mp4 esistono, su questo pianeta, con un a capo in mezzo... ;)
 
Senza il read in mezzo, anche ls di per sé se la caverebbe:
 
lem@biggy:/tmp$ touch 'as                              
ss'
lem@biggy:/tmp$ ll -1 *s
-rw-rw-r-- 1 lem lem 8 lug 26 17:03 as?ss
lem@biggy:/tmp$ aaa=$(ls -1 *ss)
lem@biggy:/tmp$ ll -1 "$aaa"
-rw-rw-r-- 1 lem lem 8 lug 26 17:03 as?ss


 spazi.
 
Giustissimo, maledetti spazi e parentesi varie! Io non ci penso perche'
la prima cosa che faccio con film e pdf vari e' "detox ./*".
 
-- 
Tanti saluti