[bash] rinominare file [RISOLTO]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
daniele50
Linux 3.x
Linux 3.x
Messaggi: 964
Iscritto il: mar 10 apr 2007, 13:58
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.1
Kernel: 3.10.17
Desktop: Xfce 4.10
Località: San Zenone al Lambro (MI)
Contatta:

[bash] rinominare file [RISOLTO]

Messaggio 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?
Ultima modifica di daniele50 il lun 12 dic 2011, 17:07, modificato 1 volta in totale.

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: [bash] rinominare file

Messaggio da ZeroUno »

Codice: Seleziona tutto

#!/bin/bash

for filename in *.wav; do
   lame $filename
   mv $filename.mp3 $(basename $filename .wav).mp3
done
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: [bash] rinominare file

Messaggio 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.

Communico
Packager
Packager
Messaggi: 200
Iscritto il: sab 3 mag 2008, 19:59
Nome Cognome: Stefano Cereda
Slackware: current
Kernel: 2.6.29.1
Desktop: kde 4.2.2
Località: Seriate (BG)

Re: [bash] rinominare file

Messaggio 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

Avatar utente
daniele50
Linux 3.x
Linux 3.x
Messaggi: 964
Iscritto il: mar 10 apr 2007, 13:58
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.1
Kernel: 3.10.17
Desktop: Xfce 4.10
Località: San Zenone al Lambro (MI)
Contatta:

Re: [bash] rinominare file

Messaggio 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

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: [bash] rinominare file

Messaggio 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...

Avatar utente
daniele50
Linux 3.x
Linux 3.x
Messaggi: 964
Iscritto il: mar 10 apr 2007, 13:58
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.1
Kernel: 3.10.17
Desktop: Xfce 4.10
Località: San Zenone al Lambro (MI)
Contatta:

Re: [bash] rinominare file

Messaggio 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:

Rispondi