PDA

View Full Version : Sostituzione di stringhe nel nome del file


eliafino
15-04-2009, 09:15
Un saluto a tutti voi...
... essendo un eterno niubbio su questo universo di Linux, vengo a voi per chiedere alcune dritte.

Ho una cartella dove ci finiscono dei file... vorrei rimuovere parte del nome dei file. I file in origine hanno questa struttura di nome:

XYZ|ABC|QWERTY|ASDF.Parte.che.mi.interessa.doc

la lunghezza di XYZ, ABC, QWERTY e ASDF è variabile.

Come faccio a rinominare il file in "Parte.che.mi.interessa.doc"?!? Fantascenza?

Un saluto by Elia

Psycotic
15-04-2009, 11:17
Semplicissimo.
Ti basta una riga cosi'

ls *doc|while read f; do mv $f `echo $f|cut -d. -f2-$NF`; done

Enjoy

n.b. Ovviamente questo ti rinomina tutti i file .doc presenti nella directory, quindi occhio a non sovrascrivere.

psimem
15-04-2009, 12:43
Se usi kde c'e' una comodissima gui che ti permette di fare praticamente di tutto: krename.

eliafino
15-04-2009, 12:50
ls *doc|while read f; do mv $f `echo $f|cut -d. -f2-$NF`; doneUrka!!! A casa provo subito, grazie 1000!!!

Se usi kde c'e' una comodissima gui che ti permette di fare praticamente di tutto: krename.Sono in riga di comando, niente GUI... mi serve sul lettore multimediale WDTV.

Un saluto e grazie!!!

masand
15-04-2009, 13:04
Semplicissimo.
Ti basta una riga cosi'

ls *doc|while read f; do mv $f `echo $f|cut -d. -f2-$NF`; done

Enjoy

n.b. Ovviamente questo ti rinomina tutti i file .doc presenti nella directory, quindi occhio a non sovrascrivere.

Interessante,
puoi per favore spiegare i passo-passo la stringa?

In questo modo anche chi è meno avvezzo comprende cosa fa il comando (in maniera che non si facciano le cose a pappagallo :D ).

Grazie :)

Un saluto a tutti...
masand

eliafino
15-04-2009, 13:04
@Psycotic

il comando mi restituisce l'errore: read: cannot run builtin as part of pipe

HexDEF6
15-04-2009, 16:23
@Psycotic

il comando mi restituisce l'errore: read: cannot run builtin as part of pipe

se usi una bash al posto di:
ls *doc|while read f; do mv $f `echo $f|cut -d. -f2-$NF`; done
fai:
for f in $(ls *.doc); do mv $f $(echo $f | cut -d. -f2-$NF); done

Ciao

per la spiegazione:

for f in $(ls *.doc) //per tutti i file che finiscono in .doc
do //fai:
mv $f $(echo $f | cut -d. -f2-$NF) //rinomina il file $f (uno di quelli che proviene dall' ls *.doc) in echo $f | cut -d. -f2-$NF (che praticamente stampa lo stesso nome di file e taglia il tutto quello che c'e' prima del primo . )
done //fatto

eliafino
15-04-2009, 21:29
for f in $(ls *.doc); do mv $f $(echo $f | cut -d. -f2-$NF); doneCavolo, dentro un file bash questo è perfetto!!!

Sei un grande!

psimem
16-04-2009, 06:42
Urka!!! A casa provo subito, grazie 1000!!!

Sono in riga di comando, niente GUI... mi serve sul lettore multimediale WDTV.

Un saluto e grazie!!!

Scusa non sono stato molto chiaro: krename e' la gui per il comando rename da shell (man rename) se non sei in modalita' grafica ;)

eliafino
16-04-2009, 07:12
Scusa non sono stato molto chiaro: krename e' la gui per il comando rename da shell (man rename) se non sei in modalita' grafica ;)Grazie, ma purtroppo non è nel repository del mio scatolo e avrei difficoltà per compilarlo...

eliafino
07-05-2009, 14:55
con un curl di un sito internet, mi viene giù una lista che vado a salvare in un file.

4 campi separati da uno spazio, l'ultimo campo è il nome dei file.

Problema, alcuni numi di file hanno degli spazzi!!!

#000 NomeCognome Dimensione File.txt
#001 NomeCognome Dimensione File da rinominare.txt

#001 NomeCognome Dimensione File_da_rinominare.txt

Possibile dirgli di sostituire gli spazi SOLO nella variabile $4?

HexDEF6
07-05-2009, 16:32
di getto mi e' venuta sta schifezza:

cat file_da_modificare.txt | awk '{nome_file="" ; for (i=1; i<=NF; i++) {if (i > 3) {nome_file = nome_file "_" $i} else printf $i " "} ; print substr(nome_file, 2, length(nome_file))}' > file_modificato.txt