Newsgroup: it.comp.os.linux.software
Titolo: forse banale: rename

Su icol.iniziare e` partita la solita discussione:
come cambiare i nomi di tutti i file di una directory da
maiuscolo a minuscolo.
Sono venute fuori una marea di soluzioni, compresa quella
di utilizzare uno script per che si chiama "rename" e che
e` presente su alcune distro. E permette di fare:
  $ rename y/A-Z/a-z/ *
Su RedHat-6.2 e altre al suo posto c'e` un eseguibile, che
si chiama sempre rename, che fa parte del pacchetto linux-util e
ha una sintassi a tre argomenti
  rename  che-cosa con-cosa file[s]
Ad esempio:
   rename TXT txt *.TXT
cambia la parte fissa dei nomi PIPPO.TXT e PLUTO.TXT
in PIPPO.txt e PLUTO.txt.
Ma come si fa ad ottenere pippo.txt e pluto.txt?
Il man e l'info  sono molto striminziti e i miei tentativi
di sostituire il che-cosa con una regular expression e il
con-cosa con un comando di sostituzione tipo sed, vi, perl, tr, ..
hanno dato risultati sconfortanti.
Qualcuno qui sa` illuminarmi?
ciao, andrea

Qualcuno qui sa` illuminarmi?
Perche` ti e` andata via la corrente ? :P
-- 
 
Tomahawk.

 maiuscolo a minuscolo.
# man tr
:-)
-- 
Pierluigi De Rosa (
tho...@durin.khazad-dum.net
).
<<      LINUX: the choice of a GNU generation     >>
<<   For my real address... ask the Balrog.       >>
* Sostenete la Lega per la Soppressione dei Troll *

# man tr
# for i in *; do mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`; done
Liberamente tratto (o meglio copiato) da un tuo post...
Ciao.
-- 
Zio Ciano.

 :-)
Come dicevo all'inizio del mio post, di modi alternativi 
per ottenere il risultato ne conosco una decina.
Compreso :
for i in *; do mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`; done
Facendo una ricerca su google recuperi una marea di script che
ti garantiscono anche di non sovrascrivere eventuali file col
nome in minuscolo gia` esistenti.
Io volevo sapere come farlo _proprio_ con il rename di linux-utils.
Esclusivamente per curiosita` personale.
Le prove che ho effettuato danno solo pasticci:
$ touch PIPPO.TXT PLUTO.TXT
$ rename [A-Z] [a-z] * |ls
PIPPO.TXT  PLUTO.TXT 
$ rename *[A-Z] [a-z] * | ls
PIPPO.TXT  PLUTO.TXT  
$ rename /A-Z/ /a-z/ * | ls
PLUTO.TXT                               # PIPPO.TXT e` sparito ????
$ touch PIPPO.TXT 
$ rename '[A-Z]' '[a-z]' * | ls          # stessa sintassi del tr
PLUTO.TXT                                # PIPPO.TXT e` sparito ????
$ rename [A-Z]* '&\l' * | ls
PIPPO.TXT  PLUTO.TXT    
$ rename .* '&\l' * | ls
PIPPO...TXT  PLUTO..TXT
ciao, Andrea

 Liberamente tratto (o meglio copiato) da un tuo post...
Brao' :-)


 Le prove che ho effettuato danno solo pasticci:
Appunto...


$ rename [A-Z] [a-z] * |ls
Da me e`:
rename 'y/A-Z/a-z/' *
-- 
Ci sentiamo  |  Remigio Zedda  || Attenzione! campo "From:" alterato
ciao Remigio |                 ||==> E-mail: 
remi...@tiscalinet.it
-------------|      ..si` d'accordo.. ma con la Deb e` un'altra cosa!
/* Linux 2.2.19pre17 su Debian GNU/Linux 2.2 Potato */

 rename 'y/A-Z/a-z/' *
Eh, se studiaste sed vedreste che e' _esattamente_ un suo comando,
questo..


questo..
Ma infatti mi sa che rename e` uno script:
file `which rename`
/usr/bin/rename: symbolic link to /etc/alternatives/rename
Cavoli.. file /etc/alt*/ren*
/etc/alternatives/rename:       symbolic link to /usr/bin/rename-5.005
/etc/alternatives/rename.1p.gz: symbolic link to
/usr/share/man/man1/rename-5.005.1p.gz
Che stress questo alternatives.. meno male che tra un po' torno alla
Slack:-)))  file "`which rename`-5.005"
/usr/bin/rename-5.005: perl script text
Beh volevi dire perl, ok lo si studiera`:-))  Uh.. 600 righe di man:-((


 writes:
Andrea> Qualcuno qui sa` illuminarmi?
Sono necessariamente in ritardo.  Per queste cose si può usare il
comando mmv. È sufficientemente più rapido di un qualsiasi script
da farlo preferire nei casi di grandi numeri.
Esempio (poco esplicativo, vista l'ora):
$ touch PIPPO.txt
$ mmv \*.txt \#l1.txt
$ ls *.txt
pippo.txt
Nulla toglie alle molteplici, innumerevoli e, come da tradizione,
fantasiose soluzioni con script.
Ciao
Marco

 Beh volevi dire perl, ok lo si studiera`:-))  Uh.. 600 righe di man:-((
No volevo dire sed:
thorin@moria:~$ echo "Questa e' una prova di uso del comando transform
di sed" | sed 'y/aeiou/kgtvd/'
Qdgstk g' dnk prvvk dt dsv dgl cvmkndv trknsfvrm dt sgd


 
Qui non si tratta di uno script pescato chissa` dove.
Si tratta di un programma C che fa parte di uno dei pacchetti chiave
della distro RedHat.
$ rpm -qf  `which rename`
util-linux-2.10f-7
$ rpm -ql util-linux |grep bin
/bin/arch
/bin/dmesg
/bin/kill
/bin/login
/bin/more
/sbin/cfdisk
/sbin/clock
/sbin/ctrlaltdel
/sbin/fdisk
....
/usr/bin/rename
....
per un totale di 56 comandi.
$ file `which rename`
/usr/bin/rename: ELF 32-bit LSB executable, Intel 80386, version 1,
dynam...
ciao, Andrea

 Beh volevi dire perl, ok lo si studiera`:-)) .....
Volendo usare il perl, si puo` dare
 $ perl -e 'for (<*>) { rename $_, lc $_ }'
per rendere minuscoli tutti i nomi di file della dir corrente.
ciao, andrea

 comando mmv. .........
Grazie, di tutti i sistemi che mi sono stati proposti e` l'unico
a cui non fossi gia` arrivato :-)
Pero`, io avrei voluto scoprire come farlo con il comando
"rename" presente nelle util-linux di RedHat-6.2.
ciao, Andrea

 della distro RedHat.
Sara' indispensabile util-linux o molti dei programmi in esso contenuti
ma non di certo questo, considerato che basta conoscere un minimo di
regexp e puoi fartelo come ti pare ed anche piu' flessibile.


 Qdgstk g' dnk prvvk dt dsv dgl cvmkndv trknsfvrm dt sgd
Sai come far funzionare i range di caratteri?
$ echo "ALL UPPERCASE" | sed 'y/[A-Z]/[a-z]/'
aLL UPPERCaSE
Massimiliano

 writes:
Andrea> Grazie, di tutti i sistemi che mi sono stati proposti e`
Andrea> l'unico a cui non fossi gia` arrivato :-)
Scusami. Ho letto il tuo messaggio, ma subito dopo ho letto tutto il
thread. Sembra che ciò mi abbia indotto a pensare che il tuo messaggio
non diceva quello che diceva :)
Andrea> Pero`, io avrei voluto scoprire come farlo con il comando
Andrea> "rename" presente nelle util-linux di RedHat-6.2.
Non mi pare si possa pretendere nulla di più di quello che dice la
pagina di manuale, visto che sono meno di 100 righe di codice. L'unica
cosa che sa fare è rinominare i file1, file2, file3 in pippo1, pippo2,
pippo3 (si fa così $ rename file pippo file*) . Non supporta nessuna
regexp, nessun trucco, niente di niente. È praticamente inutile e mi
pare ragionevole che in Debian non ci sia.
Ciao
Marco

per rendere minuscoli tutti i nomi di file della dir corrente.
Bella! La via piu` semplice altro che utility. Me la metto insieme
alle altre :-))


pare ragionevole che in Debian non ci sia.
Mette l'ELF anche la Slack e secondo me e` invece piu` utile lui,
proprio per questa numerazione (e anche per il veloce .htm-->.html).
Le altre cose, tipo maiuscolo-->minuscolo, si possono infatti fare
con altre strade ugualmente in fretta.
Lo so lo so adesso mi posterai una riga di perl-sed-awk-emacs che
li numera ;-))


Qdgstk g' dnk prvvk dt dsv dgl cvmkndv trknsfvrm dt sgd
Ok, ora ci sono, non conoscevo la y: diventa come tr.
Sed e` proprio inesauribile :-))


 Sed e` proprio inesauribile :-))
sed e' come Vi, uno strumento completo !! Lo diceva un tipo che
conoscevo e piu' passa il tempo e piu' me ne rendo conto.. :)


 
In effetti il tuo rename-PERL  fa esattamente questo, piu` un po'
di verifiche per evitare di sovrascrivere file gia` esistenti. :-)
ciao, Andrea

E ho trovato un programmillo C: rename.c 
Se puo` interessarti:
$ ls -a ../rr/rename
-rwxr-xr-x    1 rr       rr           4840 Oct 16 14:31 ../rr/rename
$ head -n 7 /slack/var/log/packages/util
PACKAGE NAME:     util
COMPRESSED PACKAGE SIZE:     1179 K
UNCOMPRESSED PACKAGE SIZE:     2930 K
PACKAGE LOCATION: diska1
PACKAGE MD5SUM: 0cb7243227c31537561c832a3ee34dc5
PACKAGE DESCRIPTION:
util:     util-linux 2.11f - A huge collection of essential utilities


for i in *; do mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`; done
Dovete mettere tra virgolette i parametri, altrimenti non funziona se
alcuni file hanno spazi nel nome.
for i in *; do mv -i "$i" "`echo $i | tr '[A-Z]' '[a-z]'`"; done
-- 
Saluti,
    Mardy
http://castellina.org/interlingua