(Courriels de diversion: <enjambera@grossissons-accumulateurs.com> <indifferemment@eluciderez-cueillais.com> <malversation@convenu-insonorisait.com> <vilipendees@encapsules-deformons.com> <imaginerez@maîtresse-blinderont.com> <supportant@tueuse-indistinctes.com> <ponderes@relirait-pelles.com> <moralite@debrailler-tirebouchonner.com> <marteleras@internerez-cannibale.com> <privatisez@surmenera-raphias.com> )


Le Mercredi 6 Octobre 2004 19:02, RIBO Thomas a écrit :
> Bonsoir à tous.
> 
> Je bute sur un problème assez bête : je voudrais renommer toute une 
> arborescence avec des noms de fichiers et de répertoire en minuscules 
> exclusivement.
> 
> Je pensais m'en sortir assez simplement à coup de find et d'awk, mais ce 
> n'est pas si simple.
> 
> Je suis en csh, et voici ce que j'ai fait pour regarder :
> 
> kiswa 781% foreach i ( `find . -print` )
> foreach? set n=`echo $i | awk '{print tolower()'}`
> foreach? echo mv $i $n
> foreach? end
> mv . .
> mv ./Components ./components
> mv ./Components/Button.xml ./components/button.xml
> mv ./Components/Geometries ./components/geometries
> mv ./Components/Geometries/Textures ./components/geometries/textures
> mv ./Components/Geometries/Textures/Button.png 
> ./components/geometries/textures/button.png
> mv ./Components/Geometries/Button.wrl ./components/geometries/button.wrl
> [...]
> 
> On voit bien qu'avec un truc comme ça, ça ne peut pas marcher. Utiliser 
> l'option -depth ne règle pas plus le problème parce que tout le chemin 
> est affiché en minuscule de toutes façons.
> 
> J'avais bien envie de l'écrire uniquement avec find, mais je ne sais pas 
> comment m'y prendre, car il faudrait que find soit capable d'oublier ou 
> de se souvenir de ce qu'il vient de faire, sans boucler et tout ça.
> 
> En essayant de simplement faire afficher le résultat transformé par 
> find, ça ne fonctionne pas :
> kiswa 791% find . -exec echo {} \| awk '{print tolower()}' \;
> . | awk {print tolower()}
> ./Components | awk {print tolower()}
> ./Components/Button.xml | awk {print tolower()}
> ./Components/Geometries | awk {print tolower()}
> ./Components/Geometries/Textures | awk {print tolower()}
> ./Components/Geometries/Textures/Button.png | awk {print tolower()}
> ./Components/Geometries/Button.wrl | awk {print tolower()}
> [...]
> 
> Je ne sais pas comment donner une entrée à awk sans faire un fichier ni 
> un pipe, mais il va bien falloir lui donner le nom du fichier courant à 
> manger...
> 
> Et il faut encore après ça faire un mv, en espérant que find est bien 
> programmé pour gérer ce genre de cas...
> 
> Si quelqu'un a une solution, même différente, je suis preneur. Les 
> solutions doivent utiliser des outils standards Unix, et ne pas utiliser 
> d'options spécifiques aux outils GNU, car ils ne sont pas forcément 
> installés sur ma cible (IRIX 6.5). Enfin, vous pouvez les donner pour la 
> postérité bien sûr, mais ça ne m'aidera pas beaucoup ;-)
> 
> Merci d'avance.


J'ai traité un programme à logique analogue par un script récursif.

Ce script bash est basé sur une fonction : dir_traitement () 
dans laquelle on entre avec en PWD le répertoire qu'on va étudier et 
comme arguments le contenu de ce directoire, supposé non nul, qu'on 
veut étudier.
On va balayer le directoire par un :
for fichier in $@ ; do
    (... traitement des fichiers du directoire...)
done
return

Si fichier n'est pas un directoire on passe son nom à tr [A-Z] [a-z] 
et un mv achève pour lui l'opération.
S'il est un répertoire ( reconnu par : if [ -d $fichier ] )
cd $fichier;
file_list=$(ls $ls_options)    #voir explication à la fin
if [ ${#file_liste} -neq 0 ]; then
    # traiter ce nouveau directoire non vide
    dir_traitement $file_liste
fi
cd ..   #on repasse au répertoire parent
#   on fait ici son changement de nom (vide ou non vide)
fi   #relatif au if de reconnaissance de fichier ou directoire
#   et dir_traitement() se termine par :
done
return


le $ls_option est déterminé par les options du script pour pouvoir, 
par exemple traiter ou non les fichiers dont le nom commence par un '.'.

Si mon script t'intéresse, je peux te l'adresser en pièce jointe.

Bonne chance et bien amicalement.

Bonne chance


--------------------------------------------------------------------
Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>