1 Punkte von GN⁺ 2025-09-29 | 1 Kommentare | Auf WhatsApp teilen
  • Beim Versuch, Bilddateien alphabetisch zu sortieren, stellte sich heraus, dass Betriebssysteme und Dateimanager unterschiedlich sortieren
  • Unter Linux werden sie mit ls korrekt sortiert, aber die meisten GUI-Dateimanager wie Windows, Google Drive und KDE Dolphin wenden bei Dateinamen mit Zahlen eine numerische Interpretation als „Natural Sort“ an
  • Dadurch kommt es zu anderen Ergebnissen als bei der klassischen Zeichenketten-Sortierung, etwa dass file-10.txt vor file-9.txt erscheint
  • Die eigentliche Ursache des Problems war, dass zwei Handys unterschiedliche Dateinamenskonventionen verwendeten: Eines hängte Millisekunden direkt an die Sekunden an, das andere trennte sie mit einem Unterstrich
  • Letztlich bleibt als Lösung nur, die Dateinamenskonvention zu vereinheitlichen oder versteckte Einstellungen der jeweiligen Dateimanager anzupassen; der Autor bedauert, dass „Computer heute Vermutungen über die Absicht des Nutzers über dessen Anweisungen stellen“

Hintergrund und Problemsituation

  • Der Autor war mit seinem Vater wandern, machte mit den jeweiligen Android-Smartphones Fotos und speicherte alle Bilder in einem einzigen Ordner
  • Das Namensschema der Bilddateien ist IMG_YYYYMMDD_HHmmss oder zusätzlich mit weiteren Ziffern vor .jpg
  • Da diese Dateinamen nach Jahr, Monat, Tag und Uhrzeit aufgebaut sind, lag die Annahme nahe, dass eine alphabetische (lexikografische) Sortierung automatisch auch der Aufnahmezeit entspricht
  • Beim Einsatz eines Windows-PCs, von Google Drive und KDE Dolphin zeigte sich jedoch, dass Dateien mit demselben Schema nicht in der erwarteten Reihenfolge sortiert wurden
    • Beispiel: Ein um 5:54 aufgenommenes Bild vom Handy des Vaters erschien vor einem Foto von 9:20 und sogar nach einem Bild von 12:11 – die Reihenfolge war also offensichtlich falsch
  • Auch Gnome und andere Dateimanager auf dem Smartphone zeigten dasselbe Ergebnis
  • Der Linux-Befehl ls hielt dagegen die korrekte Reihenfolge ein, was die Verwirrung noch vergrößerte

Ursachenanalyse

  • Zunächst vermutete der Autor, eines der beiden Handys habe vielleicht ein ungewöhnliches Zeichen statt eines Unterstrichs (_) verwendet; mit dem Linux-Befehl ls zeigte sich jedoch eine korrekte Sortierung
  • Auch auf verschiedenen Linux-Distributionen und sogar auf einem OpenBSD-Server sortierte ls korrekt alphabetisch
  • Im Gegensatz dazu vergleichen viele GUI-Dateimanager (Windows, Google Drive, KDE Dolphin usw.) bei Dateinamen mit Zahlen nach dem tatsächlichen Zahlenwert
    • Statt alphabetischer Reihenfolge wird also standardmäßig Natural Sorting verwendet
  • Beim Natural Sort werden Zahlen in Zeichenketten nicht nach ihrem Zeichenwert, sondern nach ihrem numerischen Wert verglichen
    • Beispiel: file-9.txt < file-10.txt → die Reihenfolge, die Menschen meist erwarten
    • Bei traditioneller Sortierung gilt dagegen 1 < 9, sodass file-10.txt zuerst käme
  • Moderne Dateimanager interpretieren also bei einem „Zahlenblock“ diesen Teil als echte Zahl und erzwingen dadurch, dass 9 vor 10 kommt
    • Das kann von der vom Nutzer beabsichtigten Reihenfolge abweichen

Tatsächliche Ursache und Lösung

  • Das Handy des Vaters hängte die Millisekunden direkt an die Sekunden an, während das eigene Handy sie mit einem Unterstrich getrennt schrieb
    • Handy des Vaters: Millisekunden direkt nach den Sekunden → die Zahl wird größer und in der Sortierung weiter nach hinten geschoben
    • Eigenes Handy: Trennung per Unterstrich → wird als separater String behandelt
  • Lösung: Die Dateinamen einer der beiden Seiten auf ein einheitliches Muster bringen, dann verschwindet das Problem
  • In KDE Dolphin lässt sich per Option eine rein alphabetische Sortierung auswählen, die Einstellung ist jedoch versteckt und damit umständlich zu finden
  • Da Programme diese Funktion unterschiedlich handhaben, kann jedes Mal eine separate Konfiguration nötig sein

Fazit des Autors

  • Obwohl ausdrücklich „alphabetische Reihenfolge“ gewählt wurde, kritisiert der Autor, dass Software die Absicht des Nutzers errät und deshalb eine andere Sortierung anwendet
  • Er vermisst die frühere schlichte Funktionsweise, bei der Computer einfach genau das taten, was man ihnen sagte

1 Kommentare

 
GN⁺ 2025-09-29
Hacker-News-Kommentare
  • Ich denke, dass die von Microsoft, Google und KDE übernommene Sortierweise intuitiver ist und die häufiger vorkommenden Fälle abdeckt; die Situation des Autors halte ich für äußerst selten. Die meisten Menschen möchten viel eher, dass „10“ nach „9“ kommt. Desktop-Umgebungen bezeichnen die Sortierung zudem nicht als „alphabetisch“, sondern als „nach Namen“, daher gibt es kein Missverständnis. Ich mag es zwar nicht, wenn der Computer versucht, Absichten zu erraten, aber so etwas ist im Alltag nützlich, ähnlich wie Autosave. Eine echte alphabetische Sortieroption wäre schön, aber als Standard ist eine für allgemeine Fälle intuitive Voreinstellung richtig.

    • Ich bin ebenfalls klug genug, vollkommen zu verstehen, dass „10“ in alphabetischer Reihenfolge vor „9“ kommt. Aber im Dateimanager möchte ich, dass auf „9“ die „10“ folgt. Ich möchte ungern einleitende Nullen vor einstellige Zahlen setzen, und wenn später drei Stellen nötig werden, ist das erneute Umbenennen ebenfalls lästig. Ich teile Hörbuchdateien nach Kapiteln auf und nutze, weil nicht alle Player korrekt sortieren, Formate wie „Chapter 01.mp3“ oder „Chapter 001.mp3“. Ich habe sogar Automatisierungsskripte dafür geschrieben, aber es sieht trotzdem unschön aus und ist unnötige Arbeit. Es wäre wirklich besser, wenn alle Geräte Zahlen korrekt erkennen würden.
    • Ich stimme nicht zu. Wenn es eine einzige universelle und allgemeingültige Art gäbe, Zahlen als Zeichen darzustellen, wäre das nachvollziehbar. Aber es gibt viele Varianten der Zahleneingabe, sodass dieses „Absicht lesen“ nur in manchen Fällen angemessen funktioniert. Dezimalpunkte, Tausendertrennzeichen, wissenschaftliche Schreibweise usw. sind komplizierte Sonderfälle; wenn man die Anforderungen durchgeht, merkt man, dass sich das kaum zuverlässig implementieren lässt.
    • Ich halte die Behauptung, Menschen würden führende Nullen als natürlich und vertraut empfinden, für unrealistisch. Wenn etwa Version 5.9.17 zu 5.10.0 wird, benennt niemand alle alten Ordner nachträglich in 5.09.17 um. Die heutige Standard-Sortierweise ist nicht mehrdeutig und intuitiv, während eine strikt zeichenweise Sortierung für Benutzeroberflächen ungeeignet ist.
    • Das Problem ist, dass diese Änderung vom alten „dummen“ alphabetischen Sortieren abweicht und Menschen deshalb überrascht und verwirrt. Es wäre besser gewesen, die von den meisten gewünschte „smarte“ Variante und die „strikt alphabetische“ Variante als getrennte Optionen anzubieten. Wenn man die Wahl einfach und klar macht, wirkt die Erfahrung auch auf Nicht-Experten nicht verwirrend.
    • Es wurde gesagt, Fälle, in denen man möchte, dass „10“ vor „9“ kommt, seien häufiger, aber vermutlich war das Gegenteil gemeint. Und der offizielle Name für die Sortierung „nach Namen“ ist „Natural sort order“.
  • Dieses Thema erinnert mich an die Debatte „Worse is better“. Die vom Autor geforderte einfache ANSI-/Unicode-basierte Sortierung ist eher eine Funktion, die nur eine kleine Minderheit von Entwicklern braucht. Tatsächlich wollen 99 % der GUI-Nutzer eine intuitive Sortierung. Die Hauptzielgruppe zu verstehen, hat enormen Einfluss auf das Produktdesign. Bessere Funktionen können zu einem Produkt passen, aber für ein System kann Einfachheit besser zu Wachstum und Evolution passen.

    • Das mentale Modell von Entwicklern behandelt Namen mit gemischten Zahlen rein naiv, während normale Nutzer es natürlich finden, dass 10 nach 9 kommt. Man sollte die Denkweise von Entwicklern nicht allen aufzwingen.
    • Mich würde interessieren, was jemand, der behauptet, die „schlechtere“ Methode sei nötig, über Groß-/Kleinschreibung bei der Sortierung denkt. Soll man strikt der ASCII-/Unicode-Codepoint-Reihenfolge folgen oder auf ein Zeichen normalisieren und Groß- und Kleinbuchstaben zusammenfassen?
    • Sich mit der „Zielgruppe“ gegen zusätzliche Optionen zu rechtfertigen, ist nicht überzeugend. Es ist nicht schwer, beide Varianten anzubieten. Wirklich bessere Software nimmt unterschiedliche Anforderungen auf, selbst wenn man sie in einen erweiterten Modus packt. Wie beim 80/20-Prinzip werden auch Funktionen gebraucht, die nur ein kleiner Teil nutzt. Es ist ermüdend, dass unter dem Vorwand einer perfekten Produktvision sogar selbstverständliche Funktionen weggelassen werden.
  • Beim Suchen nach Dateien mit hashbasierten Namen ist automatische Sortierung am lästigsten. Unter Windows ist das eine der wenigen Optionen, die ich sofort per Registry abschalte. Ich vermisse oft die Zeiten, in denen Computer einfach genau das taten, was man ihnen sagte. Heute wirkt es weniger so, als wollten sie „die Gedanken des Nutzers lesen“, sondern eher so, als wollten sie diese Gedanken gleich umformen. Diese dogmatische Haltung, der Nutzer liege falsch, stört mich, auch in Open Source.

    • Das Problem sorgt nicht nur bei simplen Hashes für Verwirrung, sondern auch bei vielen Kennungen, in denen bedeutungslose Zahlen in der Mitte stecken. Wenn man Dateien mit User-IDs, Unix-Timestamps oder anderen Zahlenblöcken finden muss, stehen Dinge wie abcd89764237 und abcd683426834 auffällig an seltsamen Stellen, und man sucht ewig, bevor man versteht, warum.
  • Wenn ohnehin alle behaupten, die Bedürfnisse des Durchschnittsnutzers zu kennen, warum schlägt dann niemand vor, dass der Computer gleich auch Dateinamen selbstständig nach Belieben ändern soll? Wenn man keine ASCII-Sortierung erzwingt, muss man sich auch nicht an Dateinamen inklusive Erweiterung klammern. In Wirklichkeit sind jpg- oder png-Erweiterungen den Nutzern meist egal, ebenso die Groß-/Kleinschreibung. Gerade in der Windows-Welt wurden Erweiterungen oft nur wegen alter Kompatibilität verwendet. Warum erzwingt man also weiter „computerartige Dateinamen“, bricht aber ausgerechnet „computerartige Sortierung“ so hartnäckig auf? Man sollte keine festen Annahmen darüber treffen, was Nutzer wollen, wenn man es gar nicht wissen kann.

  • Ich finde meist die im Artikel beschriebene versionsbasierte Sortierung besser. Eine alphabetische Anzeige wirkt für mich fast wie ein Bug. Ich denke, das Problem liegt weniger im Sortierkonzept als in der Bezeichnung.

    • Tatsächlich wird es nicht als „alphabetisch“ beschrieben. Der Autor hat „nach Namen“ fälschlich als „alphabetisch“ verstanden.
    • Das beschriebene Verhalten ist nützlich, aber man sollte Nutzer vorher darauf hinweisen oder ihnen die Wahl einer Option geben.
    • Auch der Linux-Befehl sort unterstützt heute Versionssortierung (sort -V). Ich kenne die interne Umsetzung nicht, aber in den meisten Situationen funktioniert das gut. Vor allem lässt es sich leicht ein- und ausschalten.
    • Die im Artikel erwähnte Sortierart ist „lexical“, aber die meisten Menschen kennen den Unterschied zwischen „lexical“ und „alphabetic“ nicht.
  • Man weist den Computer nicht an, „alphabetisch“ zu sortieren, sondern „nach Namen“, daher kann die Interpretation je nach OS unterschiedlich ausfallen. Ich denke, man hat anhand von Logik und Daten die für die meisten Nutzer passendere Interpretation gewählt. Vielleicht kommen in Zukunft Regeln dazu, etwa dass bei Zahlengruppen mit führenden Nullen wieder die ursprüngliche alphabetische Sortierung verwendet wird, oder es gibt eine Nutzeroption.

    • Wenn eine Zahl mit 0 beginnt, könnte es intuitiv sein, sie als Oktalzahl zu behandeln und das nur dann anzuwenden, wenn die folgenden Ziffern 0 bis 7 sind.
    • Allerdings hat sich diese Interpretation schon vor 10 bis 20 Jahren geändert; früher bedeutete „nach Namen“ in Dateimanagern meist tatsächlich „alphabetisch“ bzw. „lexikografisch“.
  • In macOS Foundation wird mit NSString.localizedStandardCompare() offiziell genau die Finder-Sortierung bereitgestellt. Auch Windows bietet StrCompareLogical an. Das heißt, der Maßstab für Sortierung nach Namen, also Natural Sort, wird auf den Plattformen offiziell festgelegt.

    • Ich fand es interessant, weil ich angenommen hatte, dass es sich von ls unterscheiden würde, und inzwischen halte ich diese Methode auch für besser. In Foto-Apps sortiert man normalerweise nach Zeitstempel, und wenn wirklich eine Sortierung strikt nach Namen nötig ist, würde ich entweder nach Erstellungsdatum sortieren oder die Dateinamen direkt selbst normalisieren.
  • Der Unicode-Bericht erwähnt ausdrücklich, dass sich Sortierweisen je nach Sprache und Kontext unterscheiden. Beispiel: Wenn man „A-10“ alphabetisch sortiert, ohne Zahlen als Zahlen zu erkennen, kommt „A-10“ vor „A-2“. Es ist kompliziert, aber ich denke, genau deshalb haben Dateibrowser zu Recht Natural Sort gewählt.

    • Aber weil -10 kleiner als -2 ist, müsste sich die Reihenfolge dann nicht ändern?
  • Dass „foo9“ vor „foo10“ einsortiert wird, ist „natural sort“. Ich habe kürzlich eine Python-Lösung mit zwei Zeilen für Natural Sorting kennengelernt und war sehr zufrieden damit; ich empfehle den zugehörigen Stack-Overflow-Code.

    • Auch der Befehl sort(1) unterstützt Natural Sorting (-V). Wenn man Bilddateien erstellt und mit ls | sort -V sortiert, funktioniert das korrekt. Auch die Ausgabe von du -sh * lässt sich mit der Option sort -h sortieren.
  • Ich vermisse keine Sortierung, bei der Dinge wie „Image-1.jpg, Image-11.jpg, Image-2.jpg“ durcheinandergeraten. Ich erinnere mich zwar, dass sich Natural Sort früher ungewohnt anfühlte, aber als Windows auf numerische Sortierung umgestellt hat, war das wirklich praktisch. Die Dateien wurden natürlich sortiert, und ich war damit sehr zufrieden.

    • Es gibt aber auch die Ansicht, dass diese Reihenfolge je nach Person genau das Erwartete ist; letztlich hängt es von den eigenen Präferenzen ab.