J'ai pris l'habitude, pour faire des effacements collectifs dans mes
dossiers de travail, de renommer ce que je veux garder en majuscules, ou
avec juste une majuscule en début de nom.
Jusqu'à présent, je n'avais jamais eu de souci :
$ mkdir toto Toto
$ ls -d [A-Z]*
Toto
$ rm -R [a-z]*
$ ls
Toto
Récemment j'ai reçu une machine neuve avec un Ubuntu préinstallé, et je
fais comme d'habitude, mais là j'efface _tous_ les fichiers et dossiers.
En tâtonnant, je m'aperçois que l'expression [A-Z]* donne la même chose
que [a-z]*.
Est-ce que quelqu'un peut m'indiquer comment rendre les substitutions
sensibles à la casse ?
Le 11 janvier 2019, à 22:55, Benoit Izac a écrit :
« [a-z]* » avec un LC_COLLATE français ne renverra pas les fichiers commençants par « Z » contrairement à nocaseglob activé.
$ LC_COLLATE=fr_FR.UTF-8 $ ls [a-z]* A a z
Très fort et surtout très piégeux ! Allez, c'est l'heure de zZzZzZ... -- LL Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης) C'est mieux avé les accents (F. Patte)
Alex Ternaute
Bonjour, Benoit Izac :
nocaseglob rend le « pathname expansion » insensible à la case ce qui correspond au comportement que tu décrivais à un petit détail près ; « [a-z]* » avec un LC_COLLATE français ne renverra pas les fichiers commençants par « Z » contrairement à nocaseglob activé.
Marche pas.
Qu'est ce qui ne marche pas ?
J'ai répondu de manière abrupte, certes. J'essaie maintenant de mieux décrire ce que fait nocaseglob chez moi.
$ shopt -u nocaseglob $ LC_COLLATE=fr_FR.UTF-8 $ ls [a-z]* A a z $ unset LC_COLLATE $ ls [a-z]* a z
Pas forcément, ça dépend aussi des autres variables LC_* Sur le desktop Ubuntu en tout-UTF-8 : $ echo $LC_COLLATE fr_FR.UTF-8 $ shopt -u nocaseglob $ ls [a-z]* a A z # en effet $ unset LC_COLLATE $ ls [a-z]* a A z # hélas Sur un serveur distant avec toutes les LC_* en "C" : $ LC_COLLATE="fr_FR.UTF-8" $ shopt -u nocaseglob $ ls [a-z]* a z Je configure un terminal du desktop comme ceux du serveur : $for LC in $(locale) ; do export $(echo $LC|cut -d = -f 1)=C ; done et maintenant : $ LC_COLLATE=fr_FR.UTF-8 $ shopt -u nocaseglob $ ls [a-z]* a z Maintenant je suis mieux outillé pour ce cas de figure, merci. à + -- Alex
Bonjour,
Benoit Izac :
nocaseglob rend le « pathname expansion » insensible à la case ce qui
correspond au comportement que tu décrivais à un petit détail près ;
« [a-z]* » avec un LC_COLLATE français ne renverra pas les fichiers
commençants par « Z » contrairement à nocaseglob activé.
Marche pas.
Qu'est ce qui ne marche pas ?
J'ai répondu de manière abrupte, certes. J'essaie maintenant de mieux
décrire ce que fait nocaseglob chez moi.
$ shopt -u nocaseglob
$ LC_COLLATE=fr_FR.UTF-8
$ ls [a-z]*
A a z
$ unset LC_COLLATE
$ ls [a-z]*
a z
Pas forcément, ça dépend aussi des autres variables LC_*
Sur le desktop Ubuntu en tout-UTF-8 :
$ echo $LC_COLLATE
fr_FR.UTF-8
$ shopt -u nocaseglob
$ ls [a-z]*
a A z # en effet
$ unset LC_COLLATE
$ ls [a-z]*
a A z # hélas
Sur un serveur distant avec toutes les LC_* en "C" :
$ LC_COLLATE="fr_FR.UTF-8"
$ shopt -u nocaseglob
$ ls [a-z]*
a z
Je configure un terminal du desktop comme ceux du serveur :
$for LC in $(locale) ; do export $(echo $LC|cut -d = -f 1)=C ; done
et maintenant :
$ LC_COLLATE=fr_FR.UTF-8
$ shopt -u nocaseglob
$ ls [a-z]*
a z
Maintenant je suis mieux outillé pour ce cas de figure, merci.
à +
--
Alex
nocaseglob rend le « pathname expansion » insensible à la case ce qui correspond au comportement que tu décrivais à un petit détail près ; « [a-z]* » avec un LC_COLLATE français ne renverra pas les fichiers commençants par « Z » contrairement à nocaseglob activé.
Marche pas.
Qu'est ce qui ne marche pas ?
J'ai répondu de manière abrupte, certes. J'essaie maintenant de mieux décrire ce que fait nocaseglob chez moi.
$ shopt -u nocaseglob $ LC_COLLATE=fr_FR.UTF-8 $ ls [a-z]* A a z $ unset LC_COLLATE $ ls [a-z]* a z
Pas forcément, ça dépend aussi des autres variables LC_* Sur le desktop Ubuntu en tout-UTF-8 : $ echo $LC_COLLATE fr_FR.UTF-8 $ shopt -u nocaseglob $ ls [a-z]* a A z # en effet $ unset LC_COLLATE $ ls [a-z]* a A z # hélas Sur un serveur distant avec toutes les LC_* en "C" : $ LC_COLLATE="fr_FR.UTF-8" $ shopt -u nocaseglob $ ls [a-z]* a z Je configure un terminal du desktop comme ceux du serveur : $for LC in $(locale) ; do export $(echo $LC|cut -d = -f 1)=C ; done et maintenant : $ LC_COLLATE=fr_FR.UTF-8 $ shopt -u nocaseglob $ ls [a-z]* a z Maintenant je suis mieux outillé pour ce cas de figure, merci. à + -- Alex
Lucas Levrel
Bonjour, Le 14 janvier 2019, à 09:26, Alex Ternaute a écrit :
$ shopt -u nocaseglob $ LC_COLLATE=fr_FR.UTF-8 $ ls [a-z]* A a z $ unset LC_COLLATE $ ls [a-z]* a z
Pas forcément, ça dépend aussi des autres variables LC_* Sur le desktop Ubuntu en tout-UTF-8 : $ echo $LC_COLLATE fr_FR.UTF-8 $ shopt -u nocaseglob $ ls [a-z]* a A z # en effet $ unset LC_COLLATE $ ls [a-z]* a A z # hélas
À mon avis le problème n'est pas d'autres LC_... mais LANG : en l'absence de valeur dans une LC_..., $LANG est pris à la place. C'est le sens des guillemets dans la sortie de « locale ».
Sur un serveur distant avec toutes les LC_* en "C" : $ LC_COLLATE="fr_FR.UTF-8" $ shopt -u nocaseglob $ ls [a-z]* a z Je configure un terminal du desktop comme ceux du serveur : $for LC in $(locale) ; do export $(echo $LC|cut -d = -f 1)=C ; done et maintenant : $ LC_COLLATE=fr_FR.UTF-8 $ shopt -u nocaseglob $ ls [a-z]* a z
Normal, LC_ALL prend le pas sur toute valeur LC_... définie. C'est dit dans « man 7 locale » (mais pas très clairement). -- LL Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης) C'est mieux avé les accents (F. Patte)
Bonjour,
Le 14 janvier 2019, à 09:26, Alex Ternaute a écrit :
$ shopt -u nocaseglob
$ LC_COLLATE=fr_FR.UTF-8
$ ls [a-z]*
A a z
$ unset LC_COLLATE
$ ls [a-z]*
a z
Pas forcément, ça dépend aussi des autres variables LC_*
Sur le desktop Ubuntu en tout-UTF-8 :
$ echo $LC_COLLATE
fr_FR.UTF-8
$ shopt -u nocaseglob
$ ls [a-z]*
a A z # en effet
$ unset LC_COLLATE
$ ls [a-z]*
a A z # hélas
À mon avis le problème n'est pas d'autres LC_... mais LANG : en l'absence
de valeur dans une LC_..., $LANG est pris à la place. C'est le sens des
guillemets dans la sortie de « locale ».
Sur un serveur distant avec toutes les LC_* en "C" :
$ LC_COLLATE="fr_FR.UTF-8"
$ shopt -u nocaseglob
$ ls [a-z]*
a z
Je configure un terminal du desktop comme ceux du serveur :
$for LC in $(locale) ; do export $(echo $LC|cut -d = -f 1)=C ; done
et maintenant :
$ LC_COLLATE=fr_FR.UTF-8
$ shopt -u nocaseglob
$ ls [a-z]*
a z
Normal, LC_ALL prend le pas sur toute valeur LC_... définie. C'est dit
dans « man 7 locale » (mais pas très clairement).
--
LL
Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
C'est mieux avé les accents (F. Patte)
Bonjour, Le 14 janvier 2019, à 09:26, Alex Ternaute a écrit :
$ shopt -u nocaseglob $ LC_COLLATE=fr_FR.UTF-8 $ ls [a-z]* A a z $ unset LC_COLLATE $ ls [a-z]* a z
Pas forcément, ça dépend aussi des autres variables LC_* Sur le desktop Ubuntu en tout-UTF-8 : $ echo $LC_COLLATE fr_FR.UTF-8 $ shopt -u nocaseglob $ ls [a-z]* a A z # en effet $ unset LC_COLLATE $ ls [a-z]* a A z # hélas
À mon avis le problème n'est pas d'autres LC_... mais LANG : en l'absence de valeur dans une LC_..., $LANG est pris à la place. C'est le sens des guillemets dans la sortie de « locale ».
Sur un serveur distant avec toutes les LC_* en "C" : $ LC_COLLATE="fr_FR.UTF-8" $ shopt -u nocaseglob $ ls [a-z]* a z Je configure un terminal du desktop comme ceux du serveur : $for LC in $(locale) ; do export $(echo $LC|cut -d = -f 1)=C ; done et maintenant : $ LC_COLLATE=fr_FR.UTF-8 $ shopt -u nocaseglob $ ls [a-z]* a z
Normal, LC_ALL prend le pas sur toute valeur LC_... définie. C'est dit dans « man 7 locale » (mais pas très clairement). -- LL Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης) C'est mieux avé les accents (F. Patte)
Jo Engo
Le Fri, 11 Jan 2019 09:06:35 +0000, Alex Ternaute a écrit :
C'est maintenant dans mon .bash_profile
He n'ap pas de ~/.bash_profile j'ai mis LC_COLLATE=C dans mon .bashrc mais ça risque de ne pas marcher avec les shells de login %) -- - Dites-moi, Karl, vous avez bu hier toute la monnaie coréenne ! « marx : cuviez wons. » -- Esposito-Farese, Gilles
Le Fri, 11 Jan 2019 09:06:35 +0000, Alex Ternaute a écrit :
C'est maintenant dans mon .bash_profile
He n'ap pas de ~/.bash_profile j'ai mis LC_COLLATE=C dans mon .bashrc
mais ça risque de ne pas marcher avec les shells de login %)
--
- Dites-moi, Karl, vous avez bu hier toute la monnaie coréenne !
« marx : cuviez wons. »
-- Esposito-Farese, Gilles
Le Fri, 11 Jan 2019 09:06:35 +0000, Alex Ternaute a écrit :
C'est maintenant dans mon .bash_profile
He n'ap pas de ~/.bash_profile j'ai mis LC_COLLATE=C dans mon .bashrc mais ça risque de ne pas marcher avec les shells de login %) -- - Dites-moi, Karl, vous avez bu hier toute la monnaie coréenne ! « marx : cuviez wons. » -- Esposito-Farese, Gilles
Olivier Miakinen
Le 18/01/2019 11:41, Jo Engo a [presque] écrit :
C'est maintenant dans mon .bash_profile
[J]e n'a[i] pas de ~/.bash_profile j'ai mis LC_COLLATE=C dans mon .bashrc mais ça risque de ne pas marcher avec les shells de login %)
Si c'est le cas, il te suffit de créer un .bash_profile qui appelle le .bashrc, non ? Dans le nouvellement créé ~/.bash_profile : if [ -f ~/.bashrc ]; then source ~/.bashrc fi -- Olivier Miakinen
Le 18/01/2019 11:41, Jo Engo a [presque] écrit :
C'est maintenant dans mon .bash_profile
[J]e n'a[i] pas de ~/.bash_profile j'ai mis LC_COLLATE=C dans mon .bashrc
mais ça risque de ne pas marcher avec les shells de login %)
Si c'est le cas, il te suffit de créer un .bash_profile qui appelle le
.bashrc, non ?
Dans le nouvellement créé ~/.bash_profile :
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
[J]e n'a[i] pas de ~/.bash_profile j'ai mis LC_COLLATE=C dans mon .bashrc mais ça risque de ne pas marcher avec les shells de login %)
Si c'est le cas, il te suffit de créer un .bash_profile qui appelle le .bashrc, non ? Dans le nouvellement créé ~/.bash_profile : if [ -f ~/.bashrc ]; then source ~/.bashrc fi -- Olivier Miakinen
Jo Engo
Le Sat, 19 Jan 2019 15:06:43 +0100, Olivier Miakinen a écrit :
Si c'est le cas, il te suffit de créer un .bash_profile qui appelle le .bashrc, non ? Dans le nouvellement créé ~/.bash_profile : if [ -f ~/.bashrc ]; then source ~/.bashrc fi
«ça marche chez moi» avec quand même un petit bémol : la casse est respectée mais LC_COLLATE a une autre valeur. Je vais m'inspirer de ce que tu proposes mais aussi regarder sjnma /etc/skel/bash_profile d'abord enfin je crois ;) (pense-bête) au fait toujours faire : $ echo [a-z]* et pas $ rm [a-z]* --
Boarf, tu sais, pour mon Canon un sac poubelle suffit...
Pierrôt... Chuis choqué la tu vois :) -+- Daniel, sur fr.rec.photo -+-
Le Sat, 19 Jan 2019 15:06:43 +0100, Olivier Miakinen a écrit :
Si c'est le cas, il te suffit de créer un .bash_profile qui appelle le
.bashrc, non ?
Dans le nouvellement créé ~/.bash_profile :
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
«ça marche chez moi» avec quand même un petit bémol : la casse est
respectée mais LC_COLLATE a une autre valeur. Je vais m'inspirer de ce
que tu proposes mais aussi regarder sjnma /etc/skel/bash_profile d'abord
enfin je crois ;) (pense-bête) au fait toujours faire :
$ echo [a-z]*
et pas
$ rm [a-z]*
--
Boarf, tu sais, pour mon Canon un sac poubelle suffit...
Pierrôt... Chuis choqué la tu vois :)
-+- Daniel, sur fr.rec.photo -+-
Le Sat, 19 Jan 2019 15:06:43 +0100, Olivier Miakinen a écrit :
Si c'est le cas, il te suffit de créer un .bash_profile qui appelle le .bashrc, non ? Dans le nouvellement créé ~/.bash_profile : if [ -f ~/.bashrc ]; then source ~/.bashrc fi
«ça marche chez moi» avec quand même un petit bémol : la casse est respectée mais LC_COLLATE a une autre valeur. Je vais m'inspirer de ce que tu proposes mais aussi regarder sjnma /etc/skel/bash_profile d'abord enfin je crois ;) (pense-bête) au fait toujours faire : $ echo [a-z]* et pas $ rm [a-z]* --
Boarf, tu sais, pour mon Canon un sac poubelle suffit...
Pierrôt... Chuis choqué la tu vois :) -+- Daniel, sur fr.rec.photo -+-