Bash - Remplacer maj par min dans nom de fich

Résolu/Fermé
artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024 - 18 août 2007 à 21:56
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 19 août 2007 à 08:48
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
A voir également:

8 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
18 août 2007 à 22:41
Salut,

Min => Maj
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
CCC
Maj => 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
2
artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024 7
18 août 2007 à 23:48
Je viens d'essayer to script lami20j et c'est le meme probleme que j'obtiens. Ton script est bon mais le bash considere les minuscules egales aux majuscules.

En passant, dis-moi que je ne suis pas le seul present dans ton repertoire /trash. Ca va me consoler un peu ;-))

Merci
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024
18 août 2007 à 23:52
le bash considere les minuscules egales aux majuscules.

regarde ici bash remplacer maj par min dans nom de fich#2

dis-moi que je ne suis pas le seul present dans ton repertoire /trash.

tout le CCM est dans mon répertoire trash. Oulà je serai banni :-DDDD
0
artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024 7 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
19 août 2007 à 00:11
Oui, lami20j j'ai regarde la note de jipicy.
Et merci de n'etre pas le seul dans /trash. Ca m'aurait fait quelque chose ... :-(

Merci pour ton aide, :)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
18 août 2007 à 23:14
Salut,

Affiche le résultat de la commande :
shopt | grep nocaseglob
si 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
;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
18 août 2007 à 23:20
Salut,

je ne connaissais pas shopt ;-)

Merci.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
18 août 2007 à 23:23
Tu fais pas assez de shopping c'est pour ça ;-DDDDD

De rien ;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
18 août 2007 à 23:27
Tu fais pas assez de shopping c'est pour ça

En effet, moi je fais des ncourses :-DDD
0
artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024 7
18 août 2007 à 23:34
J'ai fait ta commande jipicy et ca me donne

$ shopt | grep nocaseglob
nocaseglob off

Donc, selon ce que tu as ecrit mon bash devrait faire la difference entre les min et les maj ...

Merci
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
18 août 2007 à 23:52
Affiche le résultat de :
shopt
tout court ;-))
0
artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024 7
19 août 2007 à 00:06
Voici le resultat de $shopt :

cdable_vars off
cdspell off
checkhash off
checkwinsize on
cmdhist on
dotglob off
execfail off
expand_aliases on
extdebug off
extglob on
extquote on
failglob off
force_fignore on
gnu_errfmt off
histappend off
histreedit off
histverify off
hostcomplete off
huponexit off
interactive_comments on
lithist off
login_shell off
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo off


merci, :)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
19 août 2007 à 00:40
Bon ben là je sèche ;-\

Passe ton shell en mode débugage "set -xv" ("set -" pour repasser en mode normal), relance la commande "cd test" (ou cd Test) et enfin ton script et affiche-nous le résultat que l'on essaie de voir comment ton shell interprète les variables et les noms de fichiers...
0
artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024 7
19 août 2007 à 01:08
Tel que demande jipicy

Jacques@Mach_1:/media/sda5/Informatique/Linux$ cd test
cd test
+ cd test
echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"
++ echo -ne '\033]0;Jacques@Mach_1: /media/sda5/Informatique/Linux/test\007'
Jacques@Mach_1:/media/sda5/Informatique/Linux/test$


$bash maj_a_min.sh
bash maj_a_min.sh
+ bash maj_a_min.sh
mv: `/media/sda5/Informatique/Linux/Test/Editeur_Sed.rtf' and `/media/sda5/Informatique/Linux/Test/editeur_sed.rtf' are the same file
mv: `/media/sda5/Informatique/Linux/Test/Guide_LInux.txt' and `/media/sda5/Informatique/Linux/Test/guide_linux.txt' are the same file
mv: `/media/sda5/Informatique/Linux/Test/Notes_sur_les_Scripts.rtf' and `/media/sda5/Informatique/Linux/Test/notes_sur_les_scripts.rtf' are the same file
echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"
++ echo -ne '\033]0;Jacques@Mach_1: /media/sda5/Programmes/Scripts\007'
Jacques@Mach_1:/media/sda5/Programmes/Scripts$

Merci, :-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
19 août 2007 à 01:20
Euh... pardon, mets ausii le "set -xv" au début de ton script (en dessous de la ligne "shebang" (#! /bin/bash)

Les fichiers en minuscule n'existent pas au départ ?

Affiche aussi avant le contenu du répertoire "/media/sda5/Informatique/Linux/test/"

Merci.
0
artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024 7
19 août 2007 à 01:39
Salut jipicy

Dans le repertoire /Test il n'y a que trois fichiers qui contiennent tous au moins une majuscule. Mais il se peut qu'il existe des fichiers qui ne contiennent que des minuscules la ou je vais appliquer dans le futur le script que j'essaie d'ecrire.


Mon script

set -xv

rep="/media/sda5/Informatique/Linux/Test"
cd $rep
ls -l

for fich in $rep/*; do
nouveau=$(echo ${fich##*/} | tr 'A-Z' 'a-z');
mv -T "$fich" "$rep/$nouveau";
done


Resultat

$ bash maj_a_min.sh
bash maj_a_min.sh
+ bash maj_a_min.sh

rep="/media/sda5/Informatique/Linux/Test"
+ rep=/media/sda5/Informatique/Linux/Test
cd $rep
+ cd /media/sda5/Informatique/Linux/Test
ls -l
+ ls -l
total 144
-rwxrwx--- 1 root plugdev 4608 2007-08-18 18:52 Editeur_Sed.rtf
-rwxrwx--- 1 root plugdev 102912 2007-08-18 18:52 Guide_LInux.txt
-rwxrwx--- 1 root plugdev 2 2007-08-18 18:52 Notes_sur_les_Scripts.rtf

for fich in $rep/*; do
nouveau=$(echo ${fich##*/} | tr 'A-Z' 'a-z');
mv -T "$fich" "$rep/$nouveau";
done
+ for fich in '$rep/*'
echo ${fich##*/} | tr 'A-Z' 'a-z'
++ echo Editeur_Sed.rtf
++ tr A-Z a-z
+ nouveau=editeur_sed.rtf
+ mv -T /media/sda5/Informatique/Linux/Test/Editeur_Sed.rtf /media/sda5/Informatique/Linux/Test/editeur_sed.rtf
mv: `/media/sda5/Informatique/Linux/Test/Editeur_Sed.rtf' and `/media/sda5/Informatique/Linux/Test/editeur_sed.rtf' are the same file
+ for fich in '$rep/*'
echo ${fich##*/} | tr 'A-Z' 'a-z'
++ echo Guide_LInux.txt
++ tr A-Z a-z
+ nouveau=guide_linux.txt
+ mv -T /media/sda5/Informatique/Linux/Test/Guide_LInux.txt /media/sda5/Informatique/Linux/Test/guide_linux.txt
mv: `/media/sda5/Informatique/Linux/Test/Guide_LInux.txt' and `/media/sda5/Informatique/Linux/Test/guide_linux.txt' are the same file
+ for fich in '$rep/*'
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 -T /media/sda5/Informatique/Linux/Test/Notes_sur_les_Scripts.rtf /media/sda5/Informatique/Linux/Test/notes_sur_les_scripts.rtf
mv: `/media/sda5/Informatique/Linux/Test/Notes_sur_les_Scripts.rtf' and `/media/sda5/Informatique/Linux/Test/notes_sur_les_scripts.rtf' are the same file
echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"
++ echo -ne '\033]0;Jacques@Mach_1: /media/sda5/Programmes/Scripts\007'
Jacques@Mach_1:/media/sda5/Programmes/Scripts$

Merci, :-)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
19 août 2007 à 02:03
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$
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
19 août 2007 à 02:06
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$

0
artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024 7
19 août 2007 à 02:22
lami20j, tu viens de viser en plein dans le mille. BOUM!

J'avais cru au debut que ce probleme etait facilement resolvable. Certaines fois, il ne faut pas se fier aux apparences...

MERCI BEAUCOUP A VOUS DEUX (en majuscules svp :-)) jipicy et lami20j pour votre aide. Un autre probleme que vous resolvez.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
19 août 2007 à 02:26
de rien,

à la prochaine :-))
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
19 août 2007 à 08:48
Merchi auchi ;-))

Bon dimanche à touch.

PS. Comme quoi le "set -xv" devrait être obligatoire et indissociable du "shebang" !!!
0