Vraag alfabetische lijst verschilt tussen programma's


Dit is geen probleem, maar ik ben gewoon nieuwsgierig.

Waarom verschilt de alfabetische lijst van bestanden tussen programma's?

Het lijkt mij alsof elk programma zijn eigen aanpak implementeert voor het alfabetisch sorteren van bestandsnamen. Misschien komen deze uit de bibliotheken waarop programma's tekenen. Het is duidelijk dat ze verschillende gebruiken hebben voor de behandeling van symbolen zoals "_" of "-". Ik vind het een beetje vreemd dat deze niet consistent zijn.

Hier is een voorbeeld. Ik maak 2 bestanden, "flop.png" en "flop_drop.png". In een BASH-shell heeft de aanbieding:

-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

In Nautilus is dat echter omgekeerd

enter image description here

Maar in Geeqie zie ik hetzelfde als in BASH:

enter image description here

Terwijl het UNIX-zoekprogramma het eens is met Nautilus:

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

Ik heb verschillende rimpels als deze gezien, ik begrijp het patroon niet helemaal. Ik vermenigvuldig variaties en de ls-uitvoer in BASH geeft aan dat het de achtervoegsels bevat in alfabetische sortering:

-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

Maar Nautilus laat altijd eerst "flop.jpg" staan, ongeacht wat het onderstrepingsteken is. Ik zie dat Thunar hetzelfde doet.

Ik heb echter een afbeeldingsviewer met de naam 'gwenview' geïnstalleerd ter vergelijking. Daar krijgen we iets heel anders. De volgorde is

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

Zijn er verschillende stromingen over hoe het zou moeten worden gedaan, of zijn dit slechts toevallige verschillen?


2
2018-04-02 03:30


oorsprong


Verwant: Deze oude post had gevraagd "Nautilus sorteren op bestandsnaam kolom lijkt krankzinnig" en een opmerking opgemerkt: "Nautilus staat erom bekend de systeemomvattende omgevingsvariabele niet te eren ..." - clearkimura


antwoorden:


Blijkbaar gebruiken ze verschillende landinstellingen voor de LC_COLLATE omgevingsvariabele, die definieert "[h ow snings (bestandsnamen ...) zijn alfabetisch gesorteerd" (bron). U kunt de beschikbare landinstellingen voor uw systeem weergeven met locale -a. In het volgende voorbeeld ziet u hoe u de instelling voor slechts één opdracht kunt wijzigen (de test bestand heeft uw vier voorbeeld bestandsnamen), mijn benadering zou zijn om daar mee te spelen en aliassen zoals te definiëren alias sort="LC_COLLATE=C sort"indien nodig:

> 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

Dit antwoord naar een gerelateerde vraag geeft een goed overzicht van de locales, waar ze zijn gedefinieerd en hoe je ze kunt wijzigen.

Nautilus heeft echter blijkbaar een kever...

Bewerk

find lijkt een handmatige instelling van LC_COLLATE te negeren:

> 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

Ik heb absoluut geen idee waarom het zich zo gedraagt, vooral omdat zijn manpage vermeldt LC_COLLATE zoals gebruikt door het programma. Ik ben hier sprakeloos.


0
2017-08-09 06:51