Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/07/2010, à 15:24

erlik

Modifier des chemins à la volée

Hello

Je cherche a renommer à la volée les chemins de fichiers pour que la 1ère lettre de chaque dossier et du fichier soit en majuscule, de manière récursive
Par ex, de "Data/meshes/test/test.jpg", le fichier soit deplacé, et renommé en "Data/Meshes/Test/Test.jpg".
Je connais bien sur find pour rechercher les fichiers, mv pour les deplacer, mais par contre pour passer la 1ere lettre de chaque élément en maj .........

Merci


Je ne suis pas un geek! Je suis un être humain!

Hors ligne

#2 Le 19/07/2010, à 19:00

nesthib

Re : Modifier des chemins à la volée

regarde du côté de la commande rename

ps. sinon le future ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 19/07/2010, à 21:15

Hizoka

Re : Modifier des chemins à la volée

tu peux essayer de récupérer les noms des dossiers en variables et ainsi utiliser :

${var^}

pour mettre la 1ere lettre en maj


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 19/07/2010, à 23:10

nesthib

Re : Modifier des chemins à la volée

attention bash >= 4 seulement wink


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 20/07/2010, à 00:55

alej

Re : Modifier des chemins à la volée

J'pense qu'entre sed et dirname, tu devrais t'en sortir...

$ echo "Data/meshes/test/test.jpg"|sed 's:\/\(.\):\/\u\1:g'
Data/Meshes/Test/Test.jpg

... sans trop te casser la tête big_smile

Hors ligne

#6 Le 20/07/2010, à 12:42

erlik

Re : Modifier des chemins à la volée

Merci pour vos réponses. Pour le moment, je travaille sur ce code:

for i in `find -type f`; do mv -f "$i" "$(echo -E $i |  sed -r  's/(^.|\/.)/\U&/g')"; done

Mais il y a qlq problèmes.

D'abord, je n'arrive pas a forcer la création de l'arborescence sans passer par un mkdir -p .

Ensuite, ça ne marche pas si le chemin presente un espace, celui-ci étant coupé au niveau de l'espace. Par ex (en mofiant le code ci-dessus)

$ for i in `find -type f`; do  echo -E "${i}" |  sed -r  's/\/./\U&/g' ; done
./Data/Textures/Middle
Class/Class.jpg

au lieu de "./Data/Textures/Middle class/Class.jpg"


EDIT : j'ai réglé ce pb d'espace, du a la boucle for, en changeant la variable IFS

OLD_IFS="$IFS"
IFS=$'\n'

Dernière modification par erlik (Le 20/07/2010, à 12:51)


Je ne suis pas un geek! Je suis un être humain!

Hors ligne

#7 Le 20/07/2010, à 14:19

Hizoka

Re : Modifier des chemins à la volée

normalement rename te permet de faire en une fois : echo -E "${i}" |  sed -r  's/\/./\U&/g'

pour la boucle, pour<quoi ne pas utiliser while read line ?


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#8 Le 20/07/2010, à 15:57

nesthib

Re : Modifier des chemins à la volée

+1, là tu fais une compilation des erreurs les plus fréquentes en bash (ce qui est normal si tu débutes wink)
avec ceci au lieu d'une boucle for tu t'éviteras bien des soucis :

while read line; do
    ma_commande "${line}"
done < <(commande)

ou encore utilise find l'option -exec

sinon ton "echo … | sed …" est remplaçable par ceci (minuscules puis 1ère lettre en maj) :

VAR='/aB/cDEfgH/IjKLmN/o.PqR'
sed -r 's#/.#\U&#g' <<<${VAR,,}

à toi de combiner ces deux choses


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#9 Le 20/07/2010, à 16:37

alej

Re : Modifier des chemins à la volée

Google est mon (notre big_smile) ami...

$ tree
.
└── Data
    └── des meshes
        └── un test
            └── une image.jpg
$ find . -depth -exec rename 's/(.*)\/([^\/]*)/$1\/\u$2/' {} \;
$ tree
.
└── Data
    └── Des meshes
        └── Un test
            └── Une image.jpg

big_smile

Hors ligne

#10 Le 20/07/2010, à 17:34

Hizoka

Re : Modifier des chemins à la volée

pas mal ca le tree, je ne connaissais pas smile


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#11 Le 20/07/2010, à 18:03

alej

Re : Modifier des chemins à la volée

Hizoka a écrit :

pas mal ca le tree

Je suis fana de ce truc. Et en +, y'a des couleurs et tout... big_smile

Hors ligne