Voilà un problème qu'un pote est venu me poser hier :
Comment mettre en majuscule tout les repertoires d'une arborescence ?
Ca a l'air simple vu comme ça ... on se dit, un coup de find, un coup de tr, de rename ou de sed ... mais nan, j'vous promet que c'est pas si simple. (en tout cas, j'ai pas trouvé de solution propre).
Mon pote c'est lancé dans un script, mais moi je reste convaincu qu'il y a moyen de faire ça en 1 ligne ... seulement, je la trouve pas cette ligne :/
Merci de votre aide :)
PS : voilà ou j'en suis :
$ find . -depth -mindepth 1 -type d -exec rename 'y/a-z/A-Z/' {} \;
Mais il ne peut pas renommer toute une arborescence d'un coup. Faudrait arriver à prendre juste le dernier rep et le mettre en majuscule ... bref, je galère :/
# une arbo c'est .. .
Posté par Victor . Évalué à 1.
alors pourquoi ne pas enlever l'option mindepth ? ca te sortira tout les reps existants sous ".", non ?
[^] # Re: une arbo c'est .. .
Posté par Cereal Killer . Évalué à 1.
un arbo, c'est les repertoires + les sous-repertoires de ces repertoires et ainsi de suite.
genre t'as :
/ici/plop/pouet/yupi/
/ici/baname/melon/fraise
tu te met dans ici, tu lances ton truc et ça te sort :
/ici/PLOP/POUET/YUPI/
/ici/BANAME/MELON/FRAISE/
[^] # Re: une arbo c'est .. .
Posté par Victor . Évalué à 1.
en fait j'ai completement rien compris au probleme, le probleme c'est que ca renomme pas la fin du chemin comme ca devrait ? au pire tu fais un cd pour chaque, et tu renommes tout les repertoires dans le rep ou tu es, avec un second find imbriqué, un peu sale peut etre :]
genre
find . -depth -mindepth 1 -type d -exec "cd {} && find . -maxdepth 1 -mindepth 1 -type d -exec "rename 'y/a-z/A-Z/' {} \;" \;"
j'ai ajouté des "" pour bien voir l'imbrication, apres je suis pas sur de la syntaxe non plus :]
[^] # Re: une arbo c'est .. .
Posté par Cereal Killer . Évalué à 1.
mais
{~/test} find . -depth -mindepth 1 -type d -exec cd {} && find . -maxdepth 1 -mindepth 1 -type d -exec rename 'y/a-z/A-Z/' {} \; \;
find: Paramètre manquant pour « -exec »
et
# En plusieurs lignes
Posté par netsurfeur . Évalué à 6.
[^] # Re: En plusieurs lignes
Posté par Sylvain Sauvage . Évalué à 2.
[^] # Re: En plusieurs lignes
Posté par Cereal Killer . Évalué à 2.
Voila pour le fun :
$ find . -depth -mindepth 1 -type d | while read p; do d=`dirname "$p"`; f=`basename "$p"| tr a-z A-Z`; mv "$p" "$d/$f"; done
# j'ai raté quelque chose ?
Posté par fox (site web personnel) . Évalué à 1.
./test1/test2/test3/test4/test5
./test1/test2/test3/test4
./test1/test2/test3
./test1/test2
./test1
root@fox :/home/fox/test#find . -depth -mindepth 1 -type d | tr a-z A-Z
./TEST1/TEST2/TEST3/TEST4/TEST5
./TEST1/TEST2/TEST3/TEST4
./TEST1/TEST2/TEST3
./TEST1/TEST2
./TEST1
root@fox :/home/fox/test#
[^] # Re: j'ai raté quelque chose ?
Posté par Cereal Killer . Évalué à 3.
[^] # Re: j'ai raté quelque chose ?
Posté par fox (site web personnel) . Évalué à 1.
# Et avec sort ?
Posté par Obsidian . Évalué à 2.
On pourrait même se passer de « j » mais cela pose problème lorsque les noms des répertoires contiennent des espaces ...
[^] # Re: Et avec sort ?
Posté par fox (site web personnel) . Évalué à 1.
Si j'ai ~/test/test2/test3/test4/test5 et que je fais ca je me retrouve avec ~/test/TEST2/TEST3 et ~/test/TEST2/TEST4 et ~/test/TEST2/TEST5
[^] # Re: Et avec sort ?
Posté par Obsidian . Évalué à 2.
Comment tu fais ? Le même test fonctionne chez moi.
Quel shell utilises-tu ? Depuis quel répertoire lances-tu ta commande ?
[^] # Re: Et avec sort ?
Posté par fox (site web personnel) . Évalué à 1.
[^] # Re: Et avec sort ?
Posté par Cereal Killer . Évalué à 3.
donc, juste un $ find . -mindepth 1 -type d | blablabla
et le sort -r à le même effet que -depth
donc on garde mon $ find . -depth -mindepth 1 -type d | blablabla et c'est bon
[^] # Re: Et avec sort ?
Posté par Obsidian . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.