Pagina 1 di 1

[bash] rinominare file [RISOLTO]

Inviato: lun 12 dic 2011, 14:37
da daniele50
Ciao a tutti,
una cosa banale (per voi)...

Ho il seguente script che mi serve per convertire fil wav in mp3:

Codice: Seleziona tutto

#!/bin/bash

for filename in *.txt; do
	lame $filename
done
il mio problema è che se ho il file prova.wav lo script crea il file prova.wav.mp3.
Io devo poi rinominare il file prova.wav.mp3 in prova.mp3.
Come posso modificare lo script per fare in modo che, dopo aver creato l'mp3 mi rinomini anche il file?

Re: [bash] rinominare file

Inviato: lun 12 dic 2011, 15:13
da ZeroUno

Codice: Seleziona tutto

#!/bin/bash

for filename in *.wav; do
   lame $filename
   mv $filename.mp3 $(basename $filename .wav).mp3
done

Re: [bash] rinominare file

Inviato: lun 12 dic 2011, 15:14
da d4z_c0nf
Nel for

Codice: Seleziona tutto

lame $filename ${filename%.*}.mp3
usage: lame [options] <infile> [outfile]
In questo caso infile sarebbe $filename, e outfile saremme filename troncato di tutto ciò che viene dopo l'ultimo punto, più l'aggiunta della nuova estensione mp3.
In alternativa puoi usare basename per ricavare il sono nome.

Edit:
Scusa ZeroUno non avevo visto che suggerivi anche tu basename.

Re: [bash] rinominare file

Inviato: lun 12 dic 2011, 15:18
da Communico
Se ti serve ti posto il mio script per flac->ogg

Codice: Seleziona tutto


#!/bin/bash

IFS_OLD=$IFS
IFS=$'\x0a'
basedir=OGG/

listafile=`find . -type f | grep flac | sort`

for file in $listafile; do
        fileflac=${file}
        fileogg=${file%flac}ogg
        filesposta=$basedir${fileogg#./}

	ARTIST=`metaflac "$fileflac" --show-tag=ARTIST | sed s/.*=//g`
	TITLE=`metaflac "$fileflac" --show-tag=TITLE | sed s/.*=//g`
	ALBUM=`metaflac "$fileflac" --show-tag=ALBUM | sed s/.*=//g`
	GENRE=`metaflac "$fileflac" --show-tag=GENRE | sed s/.*=//g`
	TRACKNUMBER=`metaflac "$fileflac" --show-tag=TRACKNUMBER | sed s/.*=//g`
	DATE=`metaflac "$fileflac" --show-tag=DATE | sed s/.*=//g`

	oggenc -o $fileogg -N $TRACKNUMBER -t $TITLE -l $ALBUM -a $ARTIST -d $DATE -G $GENRE $fileflac

	mkdir -p ${filesposta%/*.ogg}
	mv $fileogg $filesposta


done

IFS=$IFS_OLD

Re: [bash] rinominare file

Inviato: lun 12 dic 2011, 15:49
da daniele50
ZeroUno ha scritto:

Codice: Seleziona tutto

#!/bin/bash

for filename in *.wav; do
   lame $filename
   mv $filename.mp3 $(basename $filename .wav).mp3
done
Così funziona alla perfezione, tranne per il fatto che non ho considerato una cosa:
se nel nome file ci sono spazi non fa nulla... posso sostituire nel nome file gli spazi con un carattere (ad esempi "_") in automatico?

-- EDIT --

Ho provato così:

Codice: Seleziona tutto

#!/bin/bash

for filename in *.wav; do
   lame "$filename"
   mv "$filename".mp3 $(basename "$filename" .wav).mp3
done
il comando lame funziona, ma il mv no, ad esempio sul file amore dimmelo.wav.mpe mi dice:
mv: target `dimmelo.mp3' is not a directory

Re: [bash] rinominare file

Inviato: lun 12 dic 2011, 16:33
da 414N
daniele50 ha scritto: Ho provato così:

Codice: Seleziona tutto

#!/bin/bash

for filename in *.wav; do
   lame "$filename"
   mv "$filename".mp3 $(basename "$filename" .wav).mp3
done
il comando lame funziona, ma il mv no, ad esempio sul file amore dimmelo.wav.mpe mi dice:
mv: target `dimmelo.mp3' is not a directory
Per forza, devi proteggere gli spazi contenuti anche nell'output di basename, quindi devi racchiudere anche l'intera espressione contenente basename tra doppi apici:

Codice: Seleziona tutto

"$(basename "$filename" .wav)".mp3
Io ti consiglierei di evitare il move dato che puoi indicare direttamente a lame quale file scrivere...

Re: [bash] rinominare file

Inviato: lun 12 dic 2011, 17:06
da daniele50
Risolto con:

Codice: Seleziona tutto

#!/bin/bash

for filename in *.wav; do
   lame -h "$filename" "$(basename "$filename" .wav)".mp3
done
Grazie a tutti dell'aiuto!! :thumbright: