Repository 32bit  Forum
Repository 64bit  Wiki

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

[bash] rinominare file [RISOLTO]

Messaggioda daniele50 » lun dic 12, 2011 14:37

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 dic 12, 2011 17:07, modificato 1 volta in totale.
Avatar utente
daniele50
Linux 2.6
Linux 2.6
 
Messaggi: 928
Iscritto il: mar apr 10, 2007 12:58
Località: San Zenone al Lambro (MI)
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.0
Kernel: 3.2.29
Desktop: Xfce 4.10

Re: [bash] rinominare file

Messaggioda ZeroUno » lun dic 12, 2011 15:13

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
ZeroUno
Staff
Staff
 
Messaggi: 4387
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: [bash] rinominare file

Messaggioda d4z_c0nf » lun dic 12, 2011 15:14

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.
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: [bash] rinominare file

Messaggioda Communico » lun dic 12, 2011 15:18

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
Communico
Packager
Packager
 
Messaggi: 200
Iscritto il: sab mag 03, 2008 18:59
Località: Seriate (BG)
Nome Cognome: Stefano Cereda
Slackware: current
Kernel: 2.6.29.1
Desktop: kde 4.2.2

Re: [bash] rinominare file

Messaggioda daniele50 » lun dic 12, 2011 15:49

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
daniele50
Linux 2.6
Linux 2.6
 
Messaggi: 928
Iscritto il: mar apr 10, 2007 12:58
Località: San Zenone al Lambro (MI)
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.0
Kernel: 3.2.29
Desktop: Xfce 4.10

Re: [bash] rinominare file

Messaggioda 414N » lun dic 12, 2011 16:33

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
414N
Iper Master
Iper Master
 
Messaggi: 2881
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [bash] rinominare file

Messaggioda daniele50 » lun dic 12, 2011 17:06

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:
Avatar utente
daniele50
Linux 2.6
Linux 2.6
 
Messaggi: 928
Iscritto il: mar apr 10, 2007 12:58
Località: San Zenone al Lambro (MI)
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.0
Kernel: 3.2.29
Desktop: Xfce 4.10


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti

cron