lista alfabética difere entre os progams

2

Isso não é um problema, mas estou apenas curioso.

Por que a listagem alfabética de arquivos difere entre os programas?

Parece-me que cada programa implementa sua própria abordagem para a classificação alfabética de nomes de arquivos. Talvez isso flua das bibliotecas nas quais os programas são desenhados. Claramente, eles têm costumes diferentes para o tratamento de símbolos como "_" ou "-". Eu acho que é um pouco estranho que eles não sejam consistentes.

Aqui está um exemplo. Eu crio 2 arquivos, "flop.png" e "flop_drop.png". Em um shell BASH, a listagem tem:

-rw-rw-r--  1 pauljohn pauljohn  3547 Apr  1 21:50 flop_drop.jpg
-rw-rw-r--  1 pauljohn pauljohn  3547 Apr  1 21:50 flop.jpg

No entanto, no Nautilus, isso é revertido

Mas no Geeqie, eu vejo o mesmo que no BASH:

Enquanto o programa de busca do UNIX concorda com o Nautilus:

$ find . -name "flo*"
./flop.jpg
./flop_drop.jpg

Eu já vi várias rugas como essa, não entendo completamente o padrão. Eu proliferar variações e a saída ls no BASH indica que está incluindo os sufixos na ordenação alfabética:

-rw-rw-r-- 1 pauljohn pauljohn 3547 Apr  1 21:50 flop_drop.jpg
-rw-rw-r-- 1 pauljohn pauljohn 3547 Apr  1 21:50 flop.jpg
-rw-rw-r-- 1 pauljohn pauljohn 3547 Apr  1 22:14 flop_nop.jpg
-rw-rw-r-- 1 pauljohn pauljohn 3547 Apr  1 22:15 flop_qrop.jpg

Mas o Nautilus sempre deixa "flop.jpg" primeiro, não importa o que segue o sublinhado. Eu vejo que Thunar faz o mesmo.

No entanto, instalei um visualizador de imagens chamado "gwenview" para comparação. Lá, conseguimos algo totalmente diferente. A encomenda é

flop_drop.jpg
flop_nop.jpg
flop_qrop.jpg
flop.jpg

Existem diferentes escolas de pensamento sobre como isso deve ser feito, ou são apenas diferenças acidentais?

    
por pauljohn32 02.04.2017 / 05:30

1 resposta

0

Aparentemente, eles usam localidades diferentes para a variável de ambiente LC_COLLATE, que define “[h] cadeias de caracteres (nomes de arquivos ...) são classificadas alfabeticamente” ( source ). Você pode exibir localidades disponíveis para o seu sistema com locale -a . O exemplo a seguir mostra como você pode alterar a configuração de apenas um comando (o arquivo test tem seus quatro nomes de arquivos de exemplo), minha abordagem seria brincar com isso e definir aliases como alias sort="LC_COLLATE=C sort" , se necessário:

> sort test # my system standard is LC_COLLATE=de_DE.UTF-8
flop_drop.jpg
flop.jpg
flop_nop.jpg
flop_qrop.jpg
> LC_COLLATE=C sort test
flop.jpg
flop_drop.jpg
flop_nop.jpg
flop_qrop.jpg

Esta resposta a uma pergunta relacionada fornece uma boa visão geral das localidades, onde elas são definidas e como você pode mudar eles.

Nautilus, no entanto, aparentemente tem um bug

Editar

find parece ignorar uma configuração manual de LC_COLLATE:

> find . -name "flop*" # my system standard is LC_COLLATE=de_DE.UTF-8
./flop.jpg
./flop_drop.jpg
./flop_qrop.jpg
./flop_nop.jpg
> LC_COLLATE=de_DE.UTF-8 find . -name "flop*"
./flop.jpg
./flop_drop.jpg
./flop_qrop.jpg
./flop_nop.jpg
> LC_COLLATE=en_EN.UTF-8 find . -name "flop*"
./flop.jpg
./flop_drop.jpg
./flop_qrop.jpg
./flop_nop.jpg

Eu não tenho absolutamente nenhuma idéia de por que ele se comporta dessa maneira, particularmente porque manpage lista LC_COLLATE como usado pelo programa. Estou sem palavras aqui.

    
por dessert 09.08.2017 / 08:51