• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Sortierung nach [Datei-]Namen unter SuSE Linux 10.1

rig

Newbie
Hallo liebe Gemeinde,

ich hab mir unter einem aus Redmond stammenden BS *hust* angewöhnt, Dateien mit einem führenden "_" zu versehen bei denen ich meine, sie nicht mehr zu benötigen bzw. bei irgentwelchen Dateien, die gesondert makiert werden sollen (um sie ggf. schneller wieder zu finden). Denn dadurch wurden diese Dateien im Explorer immer als erstes angezeigt, da bei diesem BS in der Sortierung das Zeichen "_" vor allen Buchstaben kam.

Unter SuSE Linux werden führenden "_" (egal wie viele) einfach ignoriert. Dieses sowohl im Konqueror als auch mittels "ls" in der Shell.

Nun könnte man Argumentieren, daß der Unterstrich "_" in der ASCII-Tabelle hinter den Großbuchstaben steht und SuSE Linux die Namen aller Dateien in Großbuchstaben verwandelt und dann sortiert. Dann müßten die Dateien mit führenden "_" aber am Ende stehen. Und selbst ein führendes "#", welches in der ASCII-Tabelle vor allen Buchstaben steht, ändert an der Sortierung nichts. Irgentwie scheint es so, als ob unter Linux vor der Sortierung alle "Sonderzeichen" aus den Dateinamen entfernt werden und erst dann sortiert wird.

Kann man dagegeen irgentwas tun ???

Danke & Gruß
rig
 
Die Sortierung der Dateinamen ist Locale-abhängig, d.h. abhängig von der Spracheinstellung.

Experiment:
Code:
$ touch A B C _A _B _C
$ export LC_ALL=de_DE.UTF-8
$ ls
A  _A  B  _B  C  _C
$ export LC_ALL=C
$ ls
A  B  C  _A  _B  _C
Im Klartext: Ist die Umgebung auf Deutsch eingestellt, werden die _ beim Sortieren "ignoriert", ist sie aber auf die Standard-Locale eingestellt, dann werden die _ so behandelt, wie Du es erwartest.

Warum? Keine Ahnung. Eine Lösung hätte ich aber: Ändere in der Datei /etc/sysconfig/language die Variable
Code:
RC_LC_COLLATE=""
auf
Code:
RC_LC_COLLATE="C"
und melde Dich dann einmal ab und wieder neu an. Danach wird die Sortierung wie in der Standard-Locale gemacht, der Rest bleibt aber Deutsch.

Hinweis: KDE hält sich möglicherweise nicht an diese Einstellung. Das hier ist alles nur in der bash getestet.
 
OP
rig

rig

Newbie
Hallo,

erstmal Danke für die schnelle Antwort. Klappt soweit auch super - also auch im Konqueror.

"Zusatzfrage": Gibt es sowas wie eine WerteListe für die Variable "RC_LC_COLLATE"? Warum ausgerechnet "C" und nicht "D" oder "E" oder "F" oder ... ?

Gruß
rig
 
Aus der Variable RC_LC_COLLATE in /etc/sysconfig/language wird während des Login-Vorgangs die Umgebungsvariable LC_COLLATE. Diese Umgebungsvariable kann man sich zusammen mit den anderen Locale-Variablen über den Befehl "locale" anzeigen lassen:
Code:
locale
Auf meinem System sieht das so aus:
Code:
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
Und auf Deinem System dürfte es jetzt so aussehen:
Code:
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="C"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
Eine Art "Werteliste" gibt es natürlich auch, diese kann man über
Code:
locale -a
abrufen.

Da werden dann allerhand Ländercodes angezeigt, wobei "de_DE" für Deutschland mit Legacy-Zeichensatz und "de_DE.UTF-8" für Deutschland mit Unicode-Zeichensatz steht.

Daneben gibt es dann noch zwei Sonderfälle, nämlich "C" und "POSIX". Diese beiden stehen für überhaupt kein Land, sondern sind eine Art standortneutrale, sprachneutrale Standardeinstellung. "C" und "POSIX" sind wirklich dasselbe - warum "POSIX" "POSIX" heißt, kann man sich ja denken, aber warum "C" "C" heißt, weiß ich nicht. Ich vermute aber mal, dass es etwas mit der Programmiersprache C zu tun hat.

Aber der Grund ist eigentlich auch wurscht, Du kannst stattdessen genauso gut auch "POSIX" nehmen, wenn es Dir besser gefällt ;)

Siehe auch: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap07.html
 
OP
rig

rig

Newbie
Vielen Dank für die ausführliche Erklärung. Dafür hast Du Dir ein Bienchen verdient :p

Gruß
rig
 
Oben