Forum Linux.debian/ubuntu liste alphabétique

Posté par  .
Étiquettes : aucune
0
27
juin
2008
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
  • # LS et Sort

    Posté par  . Évalué à 2.

    Regarde les options de ls (man ls) on doit pouvoir faire certains types de tri.
    Au pire tu peux rediriger le flux vers un sort qui offre pas mal de possibilités de tri ;)

    @++
    • [^] # Re: LS et Sort

      Posté par  . Évalué à 0.

      il semble que le problème vient de l'extension (.html)
      cela fonctionne sans l'extension:
      rob2@ordi:~/test$ cat liste.txt
      a
      ae
      af
      b
      c
      d
      e
      é
      è
      ê
      m
      ma
      mar

      la commande: sort liste.txt (en gardant les extensions .html n'aide pas)
      reste à demander à ls de ne lister que les fichiers

      c'est quand mème ennuyeux
  • # Etonnant en effet

    Posté par  . É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.
    • [^] # Re: Etonnant en effet

      Posté par  . É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
      • [^] # Re: Etonnant en effet

        Posté par  . Évalué à 0.

        commande find pareil

        rob2@ordi:~/test2/dictionnaire$ find *.html
        alphabet.html
        ma.html
        marteau.html
        m.html
        • [^] # Re: Etonnant en effet

          Posté par  (site web personnel) . É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.*
          • [^] # Re: Etonnant en effet

            Posté par  . Évalué à 2.

            je me doutais que c'était les locales

            je vais tester cela

            merci
            • [^] # Re: Etonnant en effet

              Posté par  . É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
              • [^] # Re: Etonnant en effet

                Posté par  (site web personnel) . É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
                • [^] # Re: Etonnant en effet

                  Posté par  . Évalué à 0.

                  merci à Amand ,je teste de suite
                  • [^] # Re: Etonnant en effet

                    Posté par  . É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
                • [^] # Re: Etonnant en effet

                  Posté par  . É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.
                  • [^] # Re: Etonnant en effet

                    Posté par  . É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(...)
                    • [^] # Re: Etonnant en effet

                      Posté par  . É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(...)
                      • [^] # Re: Etonnant en effet

                        Posté par  . É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
                        • [^] # Re: Etonnant en effet

                          Posté par  . É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
                          • [^] # Re: Etonnant en effet

                            Posté par  . Évalué à 0.

                            on peut se demander comment fait nautilus pour afficher les fichiers dans le bon
                            ordre alphabétique
                      • [^] # Re: Etonnant en effet

                        Posté par  . É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...
                        • [^] # Re: Etonnant en effet

                          Posté par  . Évalué à 0.

                          pas mieux:

                          rob2@ordi:~/dictionnaire$ ls *.html | sort -t. -k1
                          acacia.html
                          alphabet.html
                          ma.html
                          marteau.html
                          m.html
                          • [^] # Re: Etonnant en effet

                            Posté par  . Évalué à 1.

                            Et comme ça:

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

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.