OVH Cloud OVH Cloud

MAjuscule et minuscule

11 réponses
Avatar
Salut
Bonjour,
J'ai un répertoire avec pas mal de fichiers qui viennent d'un serveur
windows et les noms et extensions sont un peu n'importe comment . Je
voudrais mettre les noms de ces fichiers en minuscules .
Comment faire ?

10 réponses

1 2
Avatar
Stephane Chazelas
2004-06-29, 17:10(+02), Salut:
J'ai un répertoire avec pas mal de fichiers qui viennent d'un serveur
windows et les noms et extensions sont un peu n'importe comment . Je
voudrais mettre les noms de ces fichiers en minuscules .
Comment faire ?


Si tu as zsh 4:

autoload -U zmv # si pas deja dans le ~/.zshrc
cd /root/dir

zmv '(**/)(*[[:upper:]])' '$1${(L)2}'

Sinon, si tu as ksh, tu peux le faire avec:

cd /root/dir
find . -depth -name '*[A-Z]*' -exec ksh -c '
dir=${1%/*}
typeset -l base="${1##*/}"
exec mv "$1" "$dir/$base"' '{}' '{}' ';'

--
Stephane

Avatar
Stephane Chazelas
2004-06-29, 15:21(+00), Stephane Chazelas:
[...]
zmv '(**/)(*[[:upper:]])' '$1${(L)2}'


Oups:

zmv '(**/)(*[[:upper:]]*)' '$1${(L)2}'

Mais:

zmv '(**/)(*)' '$1${(L)2}'

suffira, en fait.

--
Stephane

Avatar
cedric
find . -type f -exec sh -c 'echo mv '{}' `echo '{}' | tr A-Z a-z`' ;

et quand tu es sur, tu retires le premier "echo" :-)
Avatar
Stephane Chazelas
2004-06-29, 19:02(+02), cedric:

find . -type f -exec sh -c 'echo mv '{}' `echo '{}' | tr A-Z a-z`' ;

et quand tu es sur, tu retires le premier "echo" :-)


Sage conseil, car ca peut deconner grave.

En premier lieu, ton quoting est bizzare, parce que c'est
exactement equivalent a:

find . -type f -exec sh -c 'echo mv {} `echo {} | tr A-Z a-z`' ;

Ensuite le {} quand il ne constitue pas l'integralité d'un
argument de find n'est pas compris par la plupart des find (en
gros, il ne doit etre reconnu que par le GNU find).

Ensuite, s'il y a des caracteres speciaux au shell dans le nom
des fichiers, ca peut faire des degats (par exemple un fichier
qui s'appellerait "whatever; rm -rf $HOME").

Ensuite, ca ne marche pas si les noms des repertoires
contiennent des majuscules.

--
Stephane

Avatar
cedric
Stephane Chazelas wrote:
En premier lieu, ton quoting est bizzare, parce que c'est
exactement equivalent a:

find . -type f -exec sh -c 'echo mv {} `echo {} | tr A-Z a-z`' ;


Tiens, oui. J'ai toujours eu du mal avec le {} de find, alors je prend
la précaution de maintenir mes petites habitudes...

Ensuite le {} quand il ne constitue pas l'integralité d'un
argument de find n'est pas compris par la plupart des find (en
gros, il ne doit etre reconnu que par le GNU find).


C'est effectivement celui que j'utilise.
Sur la freeBSD d'à coté, le find à l'air de fonctionner aussi de cette
facon.

Ensuite, s'il y a des caracteres speciaux au shell dans le nom
des fichiers, ca peut faire des degats (par exemple un fichier
qui s'appellerait "whatever; rm -rf $HOME").


Haha, oui je ne l'avais pas vu.

Ce serait vraiment pas de chance, quand même...
C'est déjà arrivé à quelqu'un ce genre de chose ?

Ensuite, ca ne marche pas si les noms des repertoires
contiennent des majuscules.


Oui ca j'avais repéré mais l'OP parlait d'un répertoire. Donc
pas de noms de répertoire s'il exécute depuis ce répertoire.

Avatar
DominiX
ici même:cbs0nr$cu9$,
Salut a écrit
Bonjour,
J'ai un répertoire avec pas mal de fichiers qui viennent d'un serveur
windows et les noms et extensions sont un peu n'importe comment . Je
voudrais mettre les noms de ces fichiers en minuscules .
Comment faire ?


perl -e 'rename $_, lc or die $! for <*>'

-- dominix

Avatar
Nicolas Le Scouarnec
Ce serait vraiment pas de chance, quand même...
C'est déjà arrivé à quelqu'un ce genre de chose ?


Oui, enfin, pas exactement, des noms de fichiers avec des points
d'exclamations tout betement, dans une boucle, ca a écrasé des fichiers
avec d'autres, déplacé des fichiers dans des repertoires "aléatoires",
créé pleins de fichiers vides partout... C'est dingue ce qu'un oubli de
guillemet peut provoquer, surtout quand on a une boucle ou un action
"repetitive".


--
Nicolas Le Scouarnec

Avatar
Stephane Chazelas
2004-06-29, 21:44(+02), cedric:
Stephane Chazelas wrote:
En premier lieu, ton quoting est bizzare, parce que c'est
exactement equivalent a:

find . -type f -exec sh -c 'echo mv {} `echo {} | tr A-Z a-z`' ;


Tiens, oui. J'ai toujours eu du mal avec le {} de find, alors je prend
la précaution de maintenir mes petites habitudes...


Mais, la, ce n'est pas le {} de find qui est en cause c'est le
quoting un peu bizarre:

'foo'{}'bar'

Pourquoi sortir des single quotes pour quoter les { et } par des
backslashes et rerentrer dans les single quotes derriere ?

Ensuite le {} quand il ne constitue pas l'integralité d'un
argument de find n'est pas compris par la plupart des find (en
gros, il ne doit etre reconnu que par le GNU find).


C'est effectivement celui que j'utilise.
Sur la freeBSD d'à coté, le find à l'air de fonctionner aussi de cette
facon.


Oui, c'est le comportement BSD et le find de GNU est basé en
partie sur celui de BSD.

Ensuite, s'il y a des caracteres speciaux au shell dans le nom
des fichiers, ca peut faire des degats (par exemple un fichier
qui s'appellerait "whatever; rm -rf $HOME").


Haha, oui je ne l'avais pas vu.

Ce serait vraiment pas de chance, quand même...
C'est déjà arrivé à quelqu'un ce genre de chose ?
[...]


Il suffit qu'il y ait des espaces (et c'est courant dans les
noms de fichiers Windows) pour que ca deconne.

--
Stephane


Avatar
cedric
Stephane Chazelas wrote:
Pourquoi sortir des single quotes pour quoter les { et } par des
backslashes et rerentrer dans les single quotes derriere ?


Oui oui, c'est débile, je ne le nie pas. Si ca marche, c'est que
'foo{}bar' fonctionne aussi.
Aie, pas sur la tête.

Avatar
gregg
DominiX wrote:

perl -e 'rename $_, lc or die $! for <*>'


waow.
même: waow.

voilà, j'hésitais encore, mais là, je lâche bourne pour perl (pour
autant que le scripting soit concerné)

waow.

1 2