|
|
|
|
Bonjour,
J'essaie de trouver une commande ou d'ecrire un script qui me permettrait d'enlever toutes les lettres majuscules dans mes noms de fichiers pour les remplacer par des lettres minuscules.
J'ai ecrit un script essentiellement base sur une discussion anterieur qui a lieu dans le forum Linux-Unix
Titre : convertir des noms de fichiers
Auteur : chris
Date : lundi 18 avril 2005 à 11h16:59
Script
rep="/media/sda5/Informatique/Linux/Test"
cd $rep
for fich in *; do
nouveau=$(echo $fich | tr '[:upper:]' '[:lower:]');
mv -T "$fich" "$nouveau";
done
Ca me donne le resultat suivant ;
mv: `Editeur_Sed.rtf' and `editeur_sed.rtf' are the same file
mv: `Guide_LInux.txt' and `guide_linux.txt' are the same file
mv: `Notes_sur_les_Scripts.rtf' and `notes_sur_les_scripts.rtf' are the same file
Donc ca ne fonctionne pas. On s'entend, ce n'est pas le script qui n'est pas bon. C'est mon shell bash qui ne voit pas la difference entre les minuscules et les majuscules. En effet, j'etais dans mon repertoire Linux et j'ai fait cd test et ca m'a deplace dans le repertoire test. Ca, je ne le savais pas.
Mon chemin est maintenant /media/sda5/Informatique/Linux/test au lieu de /media/sda5/Informatique/Linux/Test. Comment faire alors pour changer mes noms de fichiers?
Est-ce qu'il y a une variable d'environnement qui permet de faire la distinction entre les minuscules et les majuscules?
Merci
Configuration: Linux Konqueror 3.5
Salut,
lami20j@deb:~/trash/artagon$ cat ../../ccm.sh
#!/bin/bash
rep="/home/lami20j/trash/artagon"
for fich in $rep/*; do
nouveau=$(echo ${fich##*/} | tr 'a-z' 'A-Z');
mv -T "$fich" "$rep/$nouveau";
done
lami20j@deb:~/trash/artagon$ pwd
/home/lami20j/trash/artagon
lami20j@deb:~/trash/artagon$ ls -1
aaa
bbb
ccc
lami20j@deb:~/trash/artagon$ sh ../../ccm.sh
lami20j@deb:~/trash/artagon$ ls -1
AAA
BBB
CCCMaj => Min
lami20j@deb:~/trash/artagon$ cat ../../ccm1.sh
#!/bin/bash
rep="/home/lami20j/trash/artagon"
for fich in $rep/*; do
nouveau=$(echo ${fich##*/} | tr 'A-Z' 'a-z');
mv -T "$fich" "$rep/$nouveau";
done
lami20j@deb:~/trash/artagon$ ls -1
AAA
BBB
CCC
lami20j@deb:~/trash/artagon$ sh ../../ccm1.sh
lami20j@deb:~/trash/artagon$ ls -1
aaa
bbb
ccc
lami20j@deb:~/trash/artagon$--
lami20j
|
Salut,
shopt | grep nocaseglobsi l'option est à "on" c'est que ton bash ne fait pas la différence entre les majuscules et les minuscules lors du développement des noms de fichiers. Il faudra alors basculer cet été à "off" : shopt -u nocaseglob;-)) Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
Répondre à jipicy
|
Bon ben là je sèche ;-\
|
Euh... pardon, mets ausii le "set -xv" au début de ton script (en dessous de la ligne "shebang" (#! /bin/bash)
|
Et si tu fait comme ça
lami20j@deb:~/trash/artagon$ cat ../../ccm.sh
#!/bin/bash
rep="/home/lami20j/trash/artagon"
for fich in $rep/*; do
mv "$fich" "$fich.new"
nouveau=$(echo ${fich##*/} | tr 'A-Z' 'a-z');
mv "$fich.new" $rep/$nouveau
done
lami20j@deb:~/trash/artagon$ ls -1
Editeur_sed.rtf
Guide_linux.txt
Notes_sur_les_scripts.rtf
lami20j@deb:~/trash/artagon$ sh ../../ccm.sh
lami20j@deb:~/trash/artagon$ ls -1
editeur_sed.rtf
guide_linux.txt
notes_sur_les_scripts.rtf
lami20j@deb:~/trash/artagon$
lami20j |
Exécuter avec -vx
lami20j@deb:~/trash/artagon$ sh -vx ../../ccm.sh
#!/bin/bash
rep="/home/lami20j/trash/artagon"
+ rep=/home/lami20j/trash/artagon
for fich in $rep/*; do
mv "$fich" "$fich.new"
nouveau=$(echo ${fich##*/} | tr 'A-Z' 'a-z');
mv "$fich.new" $rep/${nouveau%%.new}
done
+ for fich in '$rep/*'
+ mv /home/lami20j/trash/artagon/Editeur_sed.rtf /home/lami20j/trash/artagon/Editeur_sed.rtf.new
echo ${fich##*/} | tr 'A-Z' 'a-z'
++ echo Editeur_sed.rtf
++ tr A-Z a-z
+ nouveau=editeur_sed.rtf
+ mv /home/lami20j/trash/artagon/Editeur_sed.rtf.new /home/lami20j/trash/artagon/editeur_sed.rtf
+ for fich in '$rep/*'
+ mv /home/lami20j/trash/artagon/Guide_linux.txt /home/lami20j/trash/artagon/Guide_linux.txt.new
echo ${fich##*/} | tr 'A-Z' 'a-z'
++ echo Guide_linux.txt
++ tr A-Z a-z
+ nouveau=guide_linux.txt
+ mv /home/lami20j/trash/artagon/Guide_linux.txt.new /home/lami20j/trash/artagon/guide_linux.txt
+ for fich in '$rep/*'
+ mv /home/lami20j/trash/artagon/Notes_sur_les_scripts.rtf /home/lami20j/trash/artagon/Notes_sur_les_scripts.rtf.new
echo ${fich##*/} | tr 'A-Z' 'a-z'
++ echo Notes_sur_les_scripts.rtf
++ tr A-Z a-z
+ nouveau=notes_sur_les_scripts.rtf
+ mv /home/lami20j/trash/artagon/Notes_sur_les_scripts.rtf.new /home/lami20j/trash/artagon/notes_sur_les_scripts.rtf
lami20j@deb:~/trash/artagon$
lami20j
|
De rien,
|