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.
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!!!
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
@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!
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?
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
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.