View Full Version : Aiutatemi con uno scriptino
VegetaSSJ5
20-12-2006, 13:12
Ragazzi scusate l'ignoranza ma riguardo allo scripting bash sono a zero... :D
Devo fare questo: per ogni file presente nella directory esegui il comando lame --abr 192 -b 128 -m j --mp3input -q 0 FILE
N.B.
i nomi dei files possono contenere (anzi sicuramente conterranno) degli spazi.
Per il momento la mia richiesta è questa, poi magari arricchirò lo script con qualche altra funzione (tipo la pulizia dai vecchi file prima della conversione). Potete darmi una mano? Grazie! :D
apri una console e scrivi sta roba:
for i in /home/*; do echo $i; done
buon natale!
VegetaSSJ5
20-12-2006, 14:10
apri una console e scrivi sta roba:
for i in /home/*; do echo $i; done
buon natale!
fin lì c'ero arrivato anch'io... ma il comando for i in ./*; do lame --abr 192 -b 128 -m j --mp3input -q 0 $i; done non funziona con i files contenenti spazi nei nomi... :(
ho provato, a me stampa
./Metallica - Ride The Lightning (1984) (DCC 24K Gold Remaster)
e il signor lame pretende una \ davanti agli spazi ovviemente.
e magari anche davanti alle quadre e a tutti gli altri segnacci.
cioè vorrebbe
./Metallica\ -\ Ride\ The\ Lightning\ \(1984\)\ \(DCC 24K Gold Remaster\)
qui le soluzioni sono 2:
1)non fargli risolvere i caratteri di escape
2)modificare la stringa rimettendo i "\"
al momento non ho idee istantanee, ma confido nel fatto che una soluzione esista.
e comunque odio gli spazi nei nomi. piuttosto meglio mettere un "." o un "-" :D
ilsensine
20-12-2006, 14:41
#!/bin/bash
compress()
{
filename=$1
echo "$filename"
lame --abr 192 -b 128 -m j --mp3input -q 0 "$filename"
}
(ls -1 --color=none) | while read filename
do
if [ -f "$filename" ]; then
compress "$filename"
fi
done
Il trucco sta nel mettere $filename tra apici
VegetaSSJ5
20-12-2006, 14:52
lo script postato da ilsensine funziona, ovviamente. :D
grazie 1000!
cmq ora c'è un'altra piccola cosa (che avevo anticipato nel primo post). quel comando ricomprime un file con estensione .mp3. il file risultante avrà estensione .mp3.mp3
non si può fare in modo di cancellare il file di partenza e fare in modo che quello prodotto da lame abbia lo stesso nome di quello di partenza? (chessò magari assegnando ad una variabile temporanea il nome del file di partenza, quindi cancellare questo file ed assegnare al nome del file risultante il valore della variabile temporanea)
ilsensine
20-12-2006, 15:01
Dopo il comando "lame ...", aggiungi un bel
mv -f "$filename.mp3" "$filename"
VegetaSSJ5
20-12-2006, 15:19
Dopo il comando "lame ...", aggiungi un bel
mv -f "$filename.mp3" "$filename"
ma non dovrei prima rimuovere quello vecchio?
EDIT
non avevo letto il -f :D
grazie! :)
buon natale e buone feste!
ilsensine
20-12-2006, 15:30
Anzi usa questo:
lame --abr 192 -b 128 -m j --mp3input -q 0 "$filename"
R=$?
if [ $R -eq 0 ]; then
mv -f "$filename.mp3" "$filename"
fi
così se lame per qualche motivo fallisce eviti di combinare danni.
VegetaSSJ5
20-12-2006, 19:43
grazie di nuovo!
quello è arabo per me... prossimamente vedrò di imparare qualcosa della bash... :D
R=$?
if [ $R -eq 0 ]; then
mv -f "$filename.mp3" "$filename"
fi
$? è l'exit dell'ultimo programma lanciato
se lame ritorna zero (che significa "tutto ok") allora...
che rabbia quella storia degli spazi, meno male che c'è ilsensine :muro:
VegetaSSJ5
22-12-2006, 10:26
...meno male che c'è ilsensine :muro:
se non ci fosse ilsensine bisognerebbe inventarlo... :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.