[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