[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.
Avatar utente
daniele50
Linux 2.6
Linux 2.6
Messaggi: 964
Iscritto il: mar apr 10, 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]

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
ZeroUno
Staff
Staff
Messaggi: 4856
Iscritto il: ven giu 02, 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

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

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.

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

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

Avatar utente
daniele50
Linux 2.6
Linux 2.6
Messaggi: 964
Iscritto il: mar apr 10, 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

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
414N
Iper Master
Iper Master
Messaggi: 2893
Iscritto il: mer feb 13, 2008 16:19
Slackware: current
Kernel: 3.14.23
Desktop: KDE4
Località: Bulagna
Contatta:

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
daniele50
Linux 2.6
Linux 2.6
Messaggi: 964
Iscritto il: mar apr 10, 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

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:


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite