[Linux-Biella] Ottimizzatore Mp3

Daniele Segato daniele.bilug a gmail.com
Sab 20 Mar 2010 01:30:12 CET


Il giorno ven, 19/03/2010 alle 15.44 +0100, Marcello Tescari ha scritto:
> Ciao a tutti
> 
> sto cercando di creare uno script al fine di convertire una cartella
> di Mp3 in qualsiasi bitrate -> Mp3 192bps, di modo che possano essere
> sicuramente letti dalla mia autoradio una volta copiati su una
> chiavetta o cd.
> 
> conosco il comando 
> 
> lame -b 192 $inputfile $outputfile
> 
> e so che volendo potrei usare audacity, ma queste soluzione andrebbero
> bene se i file da convertire son 2 o 3...
> 
> di conseguenza ho pensato di riciclare lo script che converte i wma in
> mp3, però non so come fare in modo che non mi sovrascriva i files di
> partenza. 
> 
> La mia idea era far creare una sottocartella "converted" dove salvare
> i nuovi files destinati poi ad essere copiati sull'autoradio, cosa che
> so come fare in bash (mkdir converted), però dopo che il ciclo interno
> allo script viene eseguito una volta, si blocca e mi da errore "la
> cartella esiste gia".
> 
> Vorrei quindi scrivere un if che mi controlli se la cartella è
> presente e quindi a quel punto il nome del file
> sarà /converted/nomefile.mp3, mentre se non è presente mi crea la
> cartella e mi mette il file all'interno.
> 
> Il mio problema è che non so come controllare in bash la presenza di
> una cartella, nè tantomeno come far si che il file venga creato in una
> sottocartella.
> 
> Vi ringrazio per l'aiuto


man test

if [ -d "/path/to/dir" ] ; then
 ....
else 
 ....
fi


if prende come valori true o false


scrivere:
[ -d "/path/to/dir" ]

è come scrivere
test -d "/path/to/dir"

quando fai script del genere il problema principale è la gestione dei
file con spazi nel nome. _SEMPRE_ mettere le variabili contenenti il
path al file tra virgolette!

se fai una cosa tipo:

cd /tmp
mkdir prova
cd prova
touch 'file con spazi'
touch 'eccone un altro'

for f in `ls`; do
   echo $f;
done;

come vedi no buono...
for f in "`ls`"; do
   echo "$f";
done;

much better...

o anche
for f in *; do
   echo "$f";
done;

* si espande

nota:
il for funziona così:

for f in uno due tre; do
   echo "f";
done;

stampa:
uno
due
tre

prende la stringa dopo "in" e la spezza con le normali regole bash, poi
esegue quel che sta dentro al do/done sostituendo ogni volta ad f la
stringa

cmq...
man bash



Maggiori informazioni sulla lista Linux