Comportamento de classificação padrão estranho

4

Eu tenho alguns problemas para entender o que está acontecendo aqui:

[guido@localhost 9]$ ls -1 Star\ Wars\ Episode\ *
Star Wars Episode II Attack of the Clones.avi
Star Wars Episode III Revenge of the Sith.avi
Star Wars Episode I The Phantom Menace.avi
Star Wars Episode IV A New Hope.avi
Star Wars Episode VI Return of the Jedi.avi
Star Wars Episode V The Empire Strikes Back.avi

III\b antes de I\b , mas II\b antes de III\b ? O que quer que esteja causando isso, não está se comportando de maneira consistente. Este também é o mesmo resultado de classificação que recebo na GUI. Eu verifiquei todos os espaços em branco são, na verdade, espaços em branco, e não há diferença entre os nomes de arquivos. Como pode ser? É pular o numeral romano e tentar resolver o problema?

Outros testes:

[guido@localhost 9]$ find -name "Star Wars *" -print
./Star Wars Episode I The Phantom Menace.avi
./Star Wars Episode II Attack of the Clones.avi
./Star Wars Episode III Revenge of the Sith.avi
./Star Wars Episode IV A New Hope.avi
./Star Wars Episode V The Empire Strikes Back.avi
./Star Wars Episode VI Return of the Jedi.avi

Mas:

[guido@localhost 9]$ find -name "Star Wars *" -print | sort
./Star Wars Episode II Attack of the Clones.avi
./Star Wars Episode III Revenge of the Sith.avi
./Star Wars Episode I The Phantom Menace.avi
./Star Wars Episode IV A New Hope.avi
./Star Wars Episode VI Return of the Jedi.avi
./Star Wars Episode V The Empire Strikes Back.avi

Enquanto:

[guido@localhost 9]$ find -name "Star Wars *" -print | sort -f
./Star Wars Episode I The Phantom Menace.avi
./Star Wars Episode II Attack of the Clones.avi
./Star Wars Episode III Revenge of the Sith.avi
./Star Wars Episode IV A New Hope.avi
./Star Wars Episode V The Empire Strikes Back.avi
./Star Wars Episode VI Return of the Jedi.avi

Eu não acho que minha localidade possa estar afetando isso (eu também a defini para en_US.utf8 de qualquer maneira) como o doc sugere. O que estou perdendo?

[guido@localhost 9]$ sort --version
sort (GNU coreutils) 8.22
    
por guido 10.10.2015 / 18:22

1 resposta

5

Os espaços (e provavelmente o caso) são ignorados ao classificar com sua localidade. Assim você tem essa ordem após o prefixo comum "Star Wars Episode":

  • IIA
  • III
  • ITH

O find retorna resulta na ordem dos diretórios, o que por acaso é a ordem "esperada".

Você pode retornar à classificação "tradicional" por meio da página do manual :

Set LC_ALL=C to get the traditional sort order that uses native byte values.

    
por 10.10.2015 / 18:30

Tags