Newsgroup: it.comp.os.linux.sys
Titolo: Rinominare files

Ciao a tutti avrei bisogno di un'aiuto, ho una cartella che contiene de
dei file creati da utenti Windows, questi file pultroppo hanno degli 
spazi all'interno del loro nome (es. "Ciao A Tutti"), è possibile creare
uno script per rinominare questi file e mettere al posto dello spazio 
l'underscore ?
Ciao a tutti.

Imperius wrote:

In windows od in Linux?
In Linux (o Unix) e` possibile.
bye,
-- 
   Piergiorgio Sartor

 
In Linux, se e' possibile come si fa'? :D

 In Linux, se e' possibile come si fa'? :D
Uhm, vediamo un po'...
man bash
man sed
dovrebbero essere sufficienti.
bye,
-- 
   Piergiorgio Sartor

    Piergiorgio Sartor
Io ho provato con questo script ma non funziona :(
dir="/temp"
 
for i in $( ls $dir ); do
        new="`echo $i |sed /\ /s//_/g`"
        $(cp $dir/$i $dir/$new)
        echo $new
        echo $old
done

         new="`echo $i |sed /\ /s//_/g`"
new=`echo "$i" | sed 's/ /_/g'`
Forse va meglio, prova.
Dovrebbe andare anche se il nome contiene
due o piu` spazi consecutivi.
bye,
-- 
   Piergiorgio Sartor

 
Grazie, sembra funzionare :D

 done
o come dice mr. Sartor o cosi':
new=echo $i | tr \  \_
ciao
Massimiliano.
--
Linux make Oracle unbreakble!

 new=echo $i | tr \  \_
In effetti forse questa e` piu` veloce.
bye,
-- 
   Piergiorgio Sartor

 Grazie, sembra funzionare :D
Mi correggo, c'è un problema col ciclo for, la variabile i viene valorizzata con le singole parole che compongono il nome dei file :(
ho provato a mettere "for i in "$( ls $dir )"; do" ma le cose peggiorano :(

 ho provato a mettere "for i in "$( ls $dir )"; do" ma le cose peggiorano :(
Prova un po':
cd $dir
for i in "$@" do
for i in "$*" do
for i in $* do
etc. etc.
man bash per ulteriori info.
bye,
-- 
   Piergiorgio Sartor

 provato a mettere "for i in "$( ls $dir )"; do" ma le cose peggiorano :(
"ls $dir" e' il risultato di un comando e quindi va racchiuso tra apici inversi!
cosi':
`ls $dir`
ciauz.
Massimiliano
--
Linux make Oracle unbreakble

 provato a mettere "for i in "$( ls $dir )"; do" ma le cose peggiorano :(
o meglio .... si fa cosi:
for i in `ls $dir` .....
ciao.
Massimiliano.

 
Gli ho provati ma non funzionano :(
Sembra impossibile :( :(

 Gli ho provati ma non funzionano :(
gli apici inversi, gli apici inversi, gli apici inversi, gli apici inversi
...
:)

On Fri, 22 Aug 2003 11:23:49 +0200, imperius wrote:

cristo ci vuole la balia con te :)
questo e' sbagliato .... no ho voglia di provarlo ma si vede:
$(cp $dir/$i $dir/$new)
cp $dir/$i va racchiudo tra doppi apici perche' contiene gli spazi!!!!!!!!
Questa volta non quelli inversi. 
E poi non serve a niente racchiudere tra parentesi e mettere un $ prima.
Quindi:
cp "$dir/$i" $dir/$new
mammamia ... :)
Massimiliano.
--
Massimiliano.



Non funziona, la variabile i continua a prendere come parametro ogni singola parola, se il file si chiama "Ciao A Tutti" la variabile i si valorizza prima con "Ciao" poi con "A" e infine con "Tutti". :(
Se non erro la sintessi `ls $dir` e' uguale a $(ls $dir) :-?



Il problema non è il cp ma la variabile $i che non prende il valore esatto.

 Sembra impossibile :( :(
Che tu non legga il manuale?
bye,
-- 
   Piergiorgio Sartor

 provato a mettere "for i in "$( ls $dir )"; do" ma le cose peggiorano :(
Scusa la domanda ma i client Win scrivono su linux con Samba ? O tu accedi 
alle loro condivisioni ?
-- 
Rizio
__________________________________
So many women, and so little time!

 
Si, e nel man bash c'è scritto che il simbolo @ e il simbolo * contengono i parametri passati allo script



Si, i client Window accedono a linux con samba e io accedo alle loro condivisioni attraverso linux. Perche'?

 Si, e nel man bash c'è scritto che il simbolo @ e il simbolo * contengono i parametri passati allo script
E quindi?
C'e` anche ben spiegato come gestire gli apici e
quindi gli spazi.
bye,
-- 
   Piergiorgio Sartor

Prova cosi
find /nomedir -exec cp {} `echo {}|tr -s \ \_` \;
Dovrebbe andare ad occhio e croce ma non l'ho provato.
Ciao
--
"Il mondo si divide in due categorie. C'è chi ha la pistola carica e chi
scava. Tu scavi !!!"

 condivisioni attraverso linux. Perche'?
Perchè per quanto sia molto interessante la discussione sugli script temo 
che ti stia complicando la vita. In samba puoi dirgli come gestire i nomi 
dei file (più esattamente quali standard seguire) e forse potresti provare 
a limitare da lì i nomi evitando così il problema alla base. Anche con le 
opzioni del mount puoi fare qualcosa in funzione di che filesystem usi, 
perciò......
Sono daccordo che non sia elegante, ma se imponi ai client di scrivere in 
_quella_ determinata share solo con i classici 8+3 eviti proprio il prob.
IMHO


 So many women, and so little time!
Che sia elegante o meno non mi interessa, so' che in samba posso limitare il numero di carattere nel nome del file, ma non sapevo che potevo limitare anche il modo in cui è scritto.
In tutti i modi se imposto una lavoro del genere adesso tutti i files già creati che non rispettano le "regole" si riescono ad utilizzare?
Come sarebbe che posso fare qualcosa acnhe con le opzioni del mount?
Ciao

Questo funziona :
IFS='
'
for i in `ls`
do
new=`echo $i |tr -s " " "_"`
cp -f $i $new
done
Ciao :)
--
"Il mondo si divide in due categorie. C'č chi ha la pistola carica e chi
scava. Tu scavi !!!"

 '
solo una domanda.
che vuol dire:
IFS='
'
??


 
Funziona :D
Ma che significa:
IFS='
'
Ciao

 '
IFS e` l'Internal Field Separator
Lo pone uguale a newline invece di spazio/tab
bye,
-- 
   Piergiorgio Sartor

 Ciao :)
perfezioniamo ... ci sono anche i file senza spazi quind:
for in in `find . -iname "* *"` piu' eventualmente `-type f`
massimiliano.
--
Linux make oracle unbreakble

 IFS e` l'Internal Field Separator
Quindi era tutto lì il problema. Non conoscevo questa cosa .... ora che
si pensa AWK ha come predefinito quel tipo di impostazione, non proprio
come Fied Separator ma come ..... non mi viene.
--
Massimiliano.

 come Fied Separator ma come ..... non mi viene.
come recoerd separator :)
--
Massimiliano
Linux make oracle unbreakble.

 Come sarebbe che posso fare qualcosa acnhe con le opzioni del mount?
se per esempio usi un filesystem FAT32 puoi limitare in parte i caratteri 
con gli unicode e il charset (man mount).
Ripeto; non voglio portarti fuori strada, ma per come ho capito il problema 
penso che ci possano essere anche queste alternative da considerare.


 
Ah si ok questo lo sò (mai provato ma sò che c'è l'opzione :D ).
Grazie.

 IMHO
8+3 ... veramente preistorico.
-- 
Ciao,
Massimiliano Adamo
* * * *
Linux make Oracle unbreakable

 
Direi "pittoresco"


 Lo pone uguale a newline invece di spazio/tab
Non capisco. Perche` impostando l'IFS con un newline cambia correttamente
lo spazio (invece di mandare a capo i termini dell'echo)?
Henryx
-- 
Valentina: "Mi piace inventare gli spettacoli che voglio... quelli
che non riesco a vedere, cerco di sognarli..."
                                          Guido Crepax (1933-2003)

 lo spazio (invece di mandare a capo i termini dell'echo)?
Il problema e` che il nome "A B" puo` essere interpretato
come due nomi "A" e "B" dato che lo spazio separa i campi.
Quindi L=`ls` con IFS="\n" mantiene i campi separati dal
newline, separati, ed i campi che potrebbero essere separati
dallo spazio, insieme.
bye,
-- 
   Piergiorgio Sartor

 dallo spazio, insieme.
Proprio cosi....
Ciao
--
"Il mondo si divide in due categorie. C'č chi ha la pistola carica e chi
scava. Tu scavi !!!"

 done
o come dice mr. Sartor o cosi':
new=echo $i | tr \  \_
ciao
Massimiliano.
--
Linux make Oracle unbreakble!