Newsgroup: it.comp.os.linux.iniziare
Titolo: lettere maiuscole e minuscole

Salve a Tutti,
sono un nuovo utente che "migra" da Windows.
supponiamo che in una directory ci siano i file
FOO.TXT
BAR.TXT
Vi chiedo se c ' e` un comando che consenta di rinominarli:
foo.txt
bar.txt
Ho provato con
mv *.TXT *.txt
ma non funziona.

 
Il comando va bene, ma devi farlo su un file alla volta.

bar.txt
ls -1|awk '{print "mv
"$1" "tolower($1)}' poi copi e incolli il risultato
Ciao, DanieleS.
--------------------------------
Inviato via 
http://usenet.iol.it
 

 sottodirectory dalla quale eseguo lo script?
perl -e 'use File::Find; find(sub{rename $_, lc $_ if -f}, ".")'
4)
recupera lo script rename, 
http://www.cs.colostate.edu/~carheden/downloads/rename
chiamalo cambianomi per non confonderlo col comando di sistema
e lancia "ls file-da-cambiare | cambianomi".
Nel tuo caso
$ ls *.TXT | cambianomi
5)
.............
ciao, Andrea

 ls -1|awk '{print "mv "$1" "tolower($1)}' poi copi e incolli il risultato
in questa
ls -1 | awk '{app=tolower($1); c=" mv " $1 " " app; system(c);}'
cosí esegue direttamente e non deve farlo perogni file
fmaks

 bar.txt
Oddio, non esiste proprio un comando... beh, c'e` questo:
perl -e '@f=split(/\n/,qx{ls *.TXT}); foreach(@f) {rename($_,lc($_));}'
Ovviamente, se avessero altre estensioni, cambia quel 'TXT'.
Bye,
 Emmanuele.
-- 
I ... Owe ... You ... Pain! -- Willow, "Tough Love"
Italian Buffy Resource Site (Beta) - 
http://www.ibrs.f2s.com
GnuPG Key ID: 0xA4320FF4
GnuPG Key FP: 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 perl -e '@f=split(/\n/,qx{ls *.TXT}); foreach(@f) {rename($_,lc($_));}'
Piu` facile:
perl -e 'foreach (split(/\n/,`ls *.TXT`)) {rename($_,lc($_))}'


 ma non funziona.
C'e` il comando rename, ma volendo usare mv io farei cosi`:
$ for i in *; do mv $i `echo $i | tr [:upper:] [:lower:]`; done
Se volevi solo una soluzione veloce, fermati pure qua.  Se invece vuoi
curiosare, leggi oltre che spiego cosa succede.  Spero che a qualche
newbie faccia piacere, se non altro per dare un assaggio di quel che
si puo` combinare. :-)
for x in <listadiparole> ; do <istruzioni> ; done 
e` un ciclo che applica le <istruzioni> a tutti i nomi nella
<listadiparole>.
* 
e` un carattere speciale a cui la shell sostituisce la lista di tutti
i file nella directory in cui ti trovi, percio` diventa ``for i in
UNO.TXT DUE.TXT TRE.TXT...''
mv
lo sai gia`. :-)
`<comandi>`
gli apostrofi al contrario (backquotes) eseguono al volo i <comandi>
contenuti e restituiscono il loro output; scrivendo echo `seq 1 10` in
pratica e` come se scrivessi echo 1 2 3 4 5 6 7 8 9 10.
echo $i
stampa $i, ovvero quella variabile che nel corso del ciclo
for...do...done assume di volta in volta il valore di un elemento
nella <listadiparole>.  Normalmente la stamperebbe a video.  In questo
caso, pero`, l'output di echo, invece di finire sullo schermo,
finisce...
|
...nella pipe, rappresentata da `|'.  La pipe (tubo) e` un sistema per
prendere l'output di un comando e farlo confluire nell'input di un
altro.  In questo caso, l'output di echo $i, che potrebbe essere
UNO.TXT, o DUE.TXT etc., confluisce in...
tr [:upper:] [:lower:]
un filtro che prende l'input, e traduce i caratteri appartenenti al
primo insieme in caratteri appartenenti al secondo (in questo caso,
maiuscole in minuscole).
Ricordiamoci che siamo ancora all'interno delle back quotes.  Quindi,
se in questo momento $i e` uguale a UNO.TXT, le <istruzioni> del ciclo
verranno interpretate cosi`:
mv UNO.TXT `echo UNO.TXT | tr [:upper:] [:lower:]`
...ovvero, risolvendo come si fa con un'equazione (se questo vi
suscita brutti ricordi, come non detto ;-) ):
mv UNO.TXT uno.txt
voila`. :-)
In altre parole, questo ciclo for...do...end e` un modo compatto e
comodo per scrivere quell che, per esteso, sarebbe:
mv UNO.TXT uno.txt
mv DUE.TXT due.txt
mv TRE.TXT tre.txt
...eccetera.
Il tutto in una shell, senza aprire editor ne' ambienti di
programmazione ne' ``tool di automazione'' :-D.  Non male, eh? ;-)
Massimiliano

 perl -e 'use File::Find; find(sub{rename $_, lc $_ if -f}, ".")'
Bellino. Altrimenti:
perl -e 'foreach (split(/\n/,`ls -1R`)) {rename($_,lc($_));}'
Bye,
 Emmanuele, TIMTOWTDI.


 C'e` il comando rename, ma ..........
appunto come si fa con il comando rename (non lo script a cui
avevo rinvito io)?
E` solo una curiosita`, visto che ho gia` citato 4 modi per farlo
e altri ne sono stati aggiunti. :-)
Il man e` estremamente succinto e non riesco a capire che sintassi usi
per un'operazione del tipo:
rename qualsiasi-Maiuscola stessa-minuscola tutti-i-file.,
e in generale se e come gestisce le regular expressions
Esempi:
$ ls
PIPPO  PLUTO
$ rename [A-Z]* p *|ls
PLUTO                   ??????????????????? che fine ha fatto PIPPO ???
$ !touch
touch PLUTO PIPPO
$ rename * p * | ls
PIPPO  PLUTO
$ rename .* p * | ls
PLUTO                   ??????????????????? che fine ha fatto PIPPO ???
ciao, Andrea

 Esempi:
[...]
Ehm, temo tu sia un pizzico fuori strada. :-)
A quanto ho capito, e riassumendo:
$ rename s/<regexp>/<replace>/ <pattern>
Sostituisce <replace> a tutto cio` che corrisponde a <regexp> nei nomi
dei file indicati da <pattern>.
$ rename y/<set1>/<set2>/ <pattern>
Traduce il <set1> di caratteri nel <set2> di caratteri per tutti i
nomi di quei file indicati da <pattern>.
Massimiliano

bar.txt
A occhio devi farti uno script di shell (una sorta di file .bat,
giusto per farti un'idea, solo molto piu' potente) che cicla
sui nomi dei file e li rinomina in locase.
Purtroppo con gli script non ci bazzico, cosi' non so dirti 
esattamente quali funzioni usare.
-- 
Filippo "Kirone" Zamengo 
Quanto scritto deve ritenersi IMHO e indipendente dal datore di lavoro
e-mail modificata: togliere DESPAM e .invalid

 
Molto probabilmente abbiamo anche due "rename" diversi:
Su RedHat-7.1
galgano > cd TEMPORANEI/prova/
galgano > rename y/A-Z/a-z/ *
galgano > ls
PIPPO  PLUTO
galgano > rename s/A-Z/a-z/ *
galgano > ls
PIPPO  PLUTO
Su una Mandrake 6.2:
tigre > rename y/A-Z/a-z/ *
tigre > ls
PIPPO  PLUTO
tigre > rename s/A-Z/a-z/ *
tigre > ls
PIPPO  PLUTO
Il man poi, in entrambi i casi, fornisce solo gli esempi per
cambiare il suffisso da htm a html e per aggiungere zeri
alla numerazione (foo1 -> foo001). Specificando che la 
sintassi prevede 3 argomenti e non due, come dici tu.
  rename  DA  A files
Quindi  
tigre > touch foto-01.jpg  foto-02.jpg  foto-03.jpg
tigre > rename y/foto/vacanze/ *
tigre > ls
foto-01.jpg  foto-02.jpg  foto-03.jpg
tigre > rename foto vacanze *
tigre > ls
vacanze-01.jpg  vacanze-02.jpg  vacanze-03.jpg
:-???
ciao, andrea

 
Mandrake e redhat mettono il rename di linux-utils.
ciao, andrea


http://www.cs.colostate.edu/~carheden/downloads/rename
Se hai il comando "rename" hai anche lo script:
$ vim `which rename`
:-)
-- 
Saluti,
    Mardy
http://castellina.org/interlingua

$ for i in *; do mv $i `echo $i | tr [:upper:] [:lower:]`; done
Occhio: se i file hanno nomi con spazi non funziona.
Devi usare
... mv "$i" `echo "$i" | ...


 
NO!
$ file `which rename`
/usr/bin/rename: ELF 32-bit LSB executable, Intel 80386, version 1,
dynamically linked (uses shared libs), stripped
Il comando rename di quasi tutte le distro e` un programmino
C che sta nelle util-linux e, andandosi a vedere il codice,
si basa su sed.
Quello che citavo io e` uno script diverso che si basa su tr.
Poi, altri ne citano un terzo, a quanto pare molto diffuso,
ed e` uno script perl.
Tutti si chiamano "rename": evviva la fantasia nei nomi :-0
ma hanno una sintassi diversa.
ciao, Andrea

ed e` uno script perl.
$ cat `which rename`
#!/usr/bin/perl -w
[...]
Ma:
$ file `which rename`
/usr/bin/rename: symbolic link to /etc/alternatives/rename
Quindi ho detto un'inesattezza, sembra che ogni distribuzione (io uso
Debian 2.2) abbia il suo rename preferito (o permetta una scelta).


 Spero che a qualche newbie faccia piacere 
...
A me sicuramente, grazie per l'esauriente spiegazione
gisan