Linux.debian : liste alphabétique

Posté par robertix (page perso, ) le 27 juin 2008
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 #945430.

Etonnant en effet

Posté par Kerro () le 27/06/2008 à 22:28. (lien). Évalué à 2.

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

    Posté par robertix (page perso, ) le 27/06/2008 à 22:38. (lien). Évalué à 0.

    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

      Posté par robertix (page perso, ) le 27/06/2008 à 23:12. (lien). Évalué à 0.

      commande find pareil

      rob2@ordi:~/test2/dictionnaire$ find *.html
      alphabet.html
      ma.html
      marteau.html
      m.html

      [ Répondre ]

      • [^]Re: Etonnant en effet

        Posté par -=[ Benoit Plessis ]=- (page perso, ) le 27/06/2008 à 23:34. (lien). Évalué à 2.

        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

          Posté par robertix (page perso, ) le 27/06/2008 à 23:40. (lien). Évalué à 2.

          je me doutais que c'était les locales

          je vais tester cela

          merci

          [ Répondre ]

          • [^]Re: Etonnant en effet

            Posté par robertix (page perso, ) le 28/06/2008 à 10:35. (lien). Évalué à 0.

            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

              Posté par Amand Tihon (page perso, ) le 28/06/2008 à 11:50. (lien). Évalué à 1.

              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

                Posté par robertix (page perso, ) le 28/06/2008 à 12:13. (lien). Évalué à 0.

                merci à Amand ,je teste de suite

                [ Répondre ]

                • [^]Re: Etonnant en effet

                  Posté par robertix (page perso, ) le 28/06/2008 à 12:20. (lien). Évalué à 0.

                  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

                Posté par Kerro () le 28/06/2008 à 12:35. (lien). Évalué à 2.

                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

                  Posté par robertix (page perso, ) le 28/06/2008 à 13:10. (lien). Évalué à 0.

                  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

                    Posté par robertix (page perso, ) le 28/06/2008 à 13:22. (lien). Évalué à 0.

                    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

                      Posté par robertix (page perso, ) le 28/06/2008 à 17:42. (lien). Évalué à 0.

                      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

                        Posté par robertix (page perso, ) le 28/06/2008 à 22:05. (lien). Évalué à -1.

                        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

                          Posté par robertix (page perso, ) le 29/06/2008 à 21:42. (lien). Évalué à 0.

                          on peut se demander comment fait nautilus pour afficher les fichiers dans le bon
                          ordre alphabétique

                          [ Répondre ]

                      [^]Re: Etonnant en effet

                      Posté par daggett () le 30/06/2008 à 16:20. (lien). Évalué à 2.

                      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

                        Posté par robertix (page perso, ) le 30/06/2008 à 22:31. (lien). Évalué à 0.

                        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

                          Posté par netsurfeur () le 01/07/2008 à 21:00. (lien). Évalué à 1.

                          Et comme ça:

                          $ ls *.html | sort -t. -k1,1
                          acacia.html
                          alphabet.html
                          m.html
                          ma.html
                          marteau.html

                          [ Répondre ]