0
voila une énigne pour la commande ls
commande locale:
rob2@ordi:~/test2$ locale
LANG=fr_FR.UTF-8
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=
commande ls sur le dossier test2:
rob2@ordi:~/test2$ ls > liste.txt
rob2@ordi:~/test2$ cat liste.txt
a.html
b.html
c.html
d.html
e.html
é.html
è.html
ê.html
liste.txt
m.html
cela semble correct
j'ajoute 4 fichiers:
rob2@ordi:~/test2$ touch ab.html cb.html éa.html ma.html
re commande ls:
rob2@ordi:~/test2$ ls > liste.txt
rob2@ordi:~/test2$ cat liste.txt
ab.html
a.html
b.html
cb.html
c.html
d.html
éa.html
e.html
é.html
è.html
ê.html
liste.txt
ma.html
m.html
là cela ne va pas
c'est pour faire les liens dans mon dictionnaire gaulois
auriez vous idée ?
merci
> Lire le message (20 commentaires, moyenne: 0,7).
Vous avez demandé le commentaire #945188.



Etonnant en effet
J'ai testé avec 'sort': ça donne exactement le même résultat.
J'ai utilisé d'autres noms pour voir:
# ls -a | sort (ou ls -a1 qui donne la même chose)
.
..
.a
a.a.html
abb.html
abc.html
ab.html
.a.html
a.html
b.html
Dans un cas on dirait que le point est considéré comme supérieur aux lettres, dans un autre cas c'est l'inverse. Je ne saisi pas la logique.
Que la commande ls traite le point de manière particulière, soit. Mais la commande sort, je ne saisi pas. Il y a probablement un détail bête qui m'échape.
[ Répondre ]
[^]Re: Etonnant en effet
je pensais utiliser la commande:
ls m*.html > index-m.txt && while read i ; do echo "<a href=\"$i.html\"><span style=\"font-weight: normal;\">$i" ; done < index-m.txt > index-m.html
pour créer automatiquement une page de liens des documents nommés commençant par m et ainsi de suite avec &&
mais les liens ne sont pas dans l'ordre
[ Répondre ]
[^]Re: Etonnant en effet
commande find pareil
rob2@ordi:~/test2/dictionnaire$ find *.html
alphabet.html
ma.html
marteau.html
m.html
[ Répondre ]
[^]Re: Etonnant en effet
rien d'étonnant à cela, la gestion des comparaison de chaines de find, ls, sort, et autre est la même, celle de la libc.
peu de chance qu'un outil marche si un autre ne marche pas ..
Quand à ton problème, je pense qu'il est déjà réglé:
http://osdir.com/ml/linux.debian.internationalization.genera(...) :
>e.g. we can now sort
> according to our braindead French collation rules, as specified in
> ISO 14651 ;)
so => aptitude install belocs-locales.*
Il [e2fsck] a bien démarré, mais il m'a rendu la main aussitot en me disant "houlala, c'est pas beau à voir votre truc, je préfèrerai que vous teniez vous même la tronçonneuse" (traduction libre)
[ Répondre ]
[^]Re: Etonnant en effet
je me doutais que c'était les locales
je vais tester cela
merci
[ Répondre ]
[^]Re: Etonnant en effet
aprés l'installation de belocs
je suppose qu'il y a quelques documents de configuration à modifier
parce que c'est pas mieux
rob2@ordi:~$ locale
LANG=fr_FR.UTF-8
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=
rob2@ordi:~/test/dictionnaire$ ls *.html
alphabet.html ma.html marteau.html m.html
[ Répondre ]
[^]Re: Etonnant en effet
C'est tout à fait normal, le point n'est pas pris en compte pour classer les mots, mais la suite bien. Tu dois te débarrasser de ce ".html" d'une manière ou d'une autre avant d'effectuer le tri pour avoir un résultat correct.
Par exemple :
$ ls -1
alphabet.html
ma.html
marteau.html
m.html
miniature.html
On voit donc que le "mh" de m.html vient avant le "mi" de miniature.html.
$ ls | sed -r 's/(.*)\.html/\1/' | sort | sed -r 's/(.*)/\1.html/'
alphabet.html
m.html
ma.html
marteau.html
miniature.html
[ Répondre ]
[^]Re: Etonnant en effet
merci à Amand ,je teste de suite
[ Répondre ]
[^]Re: Etonnant en effet
si il y a des dossiers cela donne çà:
rob2@ordi:~/test/dictionnaire/pages$ ls | sed -r 's/(.*)\.html/\1/' | sort | sed -r 's/(.*)/\1.html/'
alphabet.html
alphabet.html
m.html
m.html
ma.html
ma.html
marteau.html
marteau.html
alors je pécise a ls l'extension voulu avant de passer à sed
rob2@ordi:~/test/dictionnaire/pages$ ls *.html | sed -r 's/(.*)\.html/\1/' | sort | sed -r 's/(.*)/\1.html/'
alphabet.html
m.html
ma.html
marteau.html
rob2@ordi:~/test/dictionnaire/pages$
bien vu
merci
[ Répondre ]
[^]Re: Etonnant en effet
Il ne semble pas possible de modifier ce comportement. J'ai essayé avec les options '-n' '-g' et '-d' de la commande sort, ça ne change rien.
Exemple 1
Avantage
Avant-hier
Avant-première
Avanture (ahah)
Vicénale
Vice versa
Vice-versa
Le résultat semble conforme aux règles de classement 'linguistique'. C'est très bien pour classer selon l'ordre du dictionnaire, mais ça n'a rien à voir avec ce qu'on attends de la commande ls.
Exemple 2
Emmanuelle SAINDOULT
Emmanuel MONS
Emma THORIE
Sans commentaires :-)
La commande ls effectue donc un classement selon les règles linguistiques alors qu'on s'attends plutôt à une règle "bêtement informatique".
Pour la commande sort, il n'est pas forcément illogique que le tri soit linguistique, mais ça veut dire que si je veux trier des codes pour gérer des références par exemple, ça ne donnera pas le résultat attendu. Je ne suis pas arrivé à changer ce comportement avec les options.
[ Répondre ]
[^]Re: Etonnant en effet
cela semble un peu incohérent
voila ma commande pour générer l'index des mots commençant par m:
ls m*.html | sed -r 's/(.*)\.html/\1/' | sort > /home/rob2/test/dictionnaire/index-m.txt && while read i ; do echo "<a href=\"pages/$i.html\"><span style=\"font-weight: normal;\">$i" ; done < /home/rob2/test/dictionnaire/index-m.txt > /home/rob2/test/dictionnaire/index-m.html
voila le résultat,c'est dans l'ordre:
http://www.ponge.com/telechargements/dictionnaire/index-m.ht(...)
[ Répondre ]
[^]Re: Etonnant en effet
ou plus simplement pour ne pas lister les index les mettre en extension .htm
rob2@ordi:~/mes-documents/mes-sites/www.ponge.com/telechargements/dictionnaire$ ls m*.html | sed -r 's/(.*)\.html/\1/' | sort > index-m.txt && while read i ; do echo "<a href=\"$i.html\"><span style=\"font-weight: normal;\">$i" ; done < index-m.txt > index-m.htm
http://www.ponge.com/telechargements/dictionnaire/index-m.ht(...)
[ Répondre ]
[^]Re: Etonnant en effet
avec les retours à la ligne:
ls m*.html | sed -r 's/(.*)\.html/\1/' | sort > index-m.txt && while read i ; do echo "<a href=\"$i.html\"><span style=\"font-weight: normal;\">$i</span></a><br>" ; done < index-m.txt > index-m.htm
simple index de pages html:
ls *.html | sed -r 's/(.*)\.html/\1/' | sort > index.txt && while read i ; do echo "<a href=\"$i.html\"><span style=\"font-weight: normal;\">$i</span></a><br>" ; done < index.txt > index.html
pour que le code soit complet il faut le poster avec
texte sans html
[ Répondre ]
[+] [^]Re: Etonnant en effet
suite de l'énigme ls:
copier coller la liste
liste1.txt
0.html
1.html
2.html
3.html
4.html
5.html
6.html
7.html
8.html
9.html
a.html
à.html
â.html
b.html
c.html
ç.html
d.html
e.html
é.html
è.html
ê.html
f.html
g.html
h.html
~.html
µ.html
_.html
..html
$.html
%.html
+.html
i.html
î.html
ï.html
j.html
k.html
l.html
m-a.html
ma.html
m-b.html
mb.html
m.html
n.html
o.html
ô.html
p.html
q.html
r.html
s.html
t.html
u.html
ù.html
v.html
w.html
x.html
y.html
z.html
commande:
while read i ; do > "$i" ; done < liste1.txt
les documents .html sont crées
puis commande:
ls -a -1 > liste2.txt
résultat
liste2.txt:
0.html
1.html
2.html
3.html
4.html
5.html
6.html
7.html
8.html
9.html
a.html
à.html
â.html
b.html
c.html
ç.html
d.html
e.html
é.html
è.html
ê.html
f.html
g.html
h.html
~.html
µ.html
_.html
..html
$.html
%.html
+.html
i.html
î.html
ï.html
j.html
k.html
l.html
m-a.html # erreur
ma.html
m-b.html # erreur
mb.html
m.html # erreur
n.html
o.html
ô.html
p.html
q.html
r.html
s.html
t.html
u.html
ù.html
v.html
w.html
x.html
y.html
z.html
puis commande;
ls -a *html | sed -r 's/(.*)\.html/\1/' | sort | sed -r 's/(.*)/\1.html/' > liste3.txt
résultat
liste3.txt
~.html
µ.html
_.html
$.html
%.html
+.html
0.html
1.html
2.html
3.html
4.html
5.html
6.html
7.html
8.html
9.html
a.html
à.html
â.html
b.html
c.html
ç.html
d.html
e.html
é.html
è.html
ê.html
f.html
g.html
h.html
i.html
î.html
ï.html
j.html
k.html
l.html
m.html
ma.html
m-a.html
mb.html
m-b.html
n.html
o.html
ô.html
p.html
q.html
r.html
s.html
t.html
u.html
ù.html
v.html
w.html
x.html
y.html
z.html
c'est mieux
si vous voulez participer au jeu,bienvenu
[ Répondre ]
[^]Re: Etonnant en effet
on peut se demander comment fait nautilus pour afficher les fichiers dans le bon
ordre alphabétique
[ Répondre ]
[^]Re: Etonnant en effet
Plutôt que de couper les .html avec sed, je propose de dire directement à sort de s'arrêter à l'extension :
| sort -t. -k1
ce qui aura peut-être l'effet de corriger le tri dans la foulée.
chezmoiçamarchepas, mais j'avais pas non plus le même comportement au départ...
[ Répondre ]
[^]Re: Etonnant en effet
pas mieux:
rob2@ordi:~/dictionnaire$ ls *.html | sort -t. -k1
acacia.html
alphabet.html
ma.html
marteau.html
m.html
[ Répondre ]
[^]Re: Etonnant en effet
Et comme ça:
$ ls *.html | sort -t. -k1,1
acacia.html
alphabet.html
m.html
ma.html
marteau.html
[ Répondre ]