1 puntos por GN⁺ 2025-09-29 | 1 comentarios | Compartir por WhatsApp
  • Intentó ordenar archivos de fotos alfabéticamente, pero el sistema operativo y el administrador de archivos daban resultados de ordenamiento distintos
  • En Linux, ls los ordena correctamente, pero la mayoría de los administradores de archivos con GUI como Windows, Google Drive y KDE Dolphin aplican “orden natural (natural sort)”, interpretando numéricamente los nombres de archivo que contienen cifras
  • Por eso, file-10.txt puede aparecer antes que file-9.txt, produciendo un resultado distinto al del ordenamiento tradicional de cadenas
  • La causa real del problema era que dos teléfonos usaban reglas distintas para nombrar archivos: uno añadía milisegundos justo después de los segundos, mientras que el otro los separaba con un guion bajo, cambiando así el criterio de ordenamiento
  • Al final, la única solución fue unificar la convención de nombres de archivo o modificar ajustes ocultos de cada administrador de archivos; el autor lamenta “una época en la que la computadora prioriza adivinar antes que seguir las instrucciones del usuario”

Contexto y situación del problema

  • El autor fue de excursión con su padre y tomaron fotos con sus respectivos teléfonos Android; después guardó todas las fotos en una sola carpeta
  • La convención de nombres de las fotos era IMG_YYYYMMDD_HHmmss o bien ese patrón seguido de números adicionales y .jpg
  • Como esos nombres están en orden de año, mes, día y hora, pensó que al ordenar los archivos alfabéticamente (orden lexicográfico) también quedarían ordenados por momento de captura
  • Al usar una PC con Windows, Google Drive, KDE Dolphin y otros, los archivos con la misma convención no quedaban ordenados correctamente
    • Ejemplo: una foto de las 5:54 tomada con el teléfono del padre aparecía antes que una de las 9:20 y hasta después de una de las 12:11, es decir, el orden era incorrecto
  • En Gnome y otros administradores de archivos del teléfono ocurría lo mismo
  • En cambio, el comando ls de Linux mantenía el orden correcto, aumentando la confusión

Análisis de la causa

  • Al principio pensó que uno de los dos teléfonos había usado algún carácter extraño en lugar de guion bajo (_), pero al verificar con el comando ls en Linux, el orden salía bien
  • En varias distribuciones de Linux e incluso en un servidor OpenBSD, ls sí ordenaba correctamente en orden alfabético
  • En contraste, muchos administradores de archivos con GUI (Windows, Google Drive, KDE Dolphin, etc.) comparan por el valor real del número cuando el nombre de archivo contiene cifras
    • Aplican por defecto orden natural (natural sorting) en lugar de orden alfabético
  • El orden natural compara los números dentro de una cadena como valores numéricos, no solo como caracteres
    • Ejemplo: file-9.txt < file-10.txt → el orden que una persona suele esperar
    • Pero en el orden tradicional, como 1 < 9, file-10.txt queda antes
  • Sin embargo, los administradores de archivos actuales, si encuentran una “parte numérica”, interpretan esa sección según su valor numérico real y fuerzan que 9 aparezca antes que 10
    • Esto puede diferir del orden que pretendía la persona que creó los nombres de archivo

Causa real del problema y solución

  • El teléfono del padre añadía los milisegundos inmediatamente después de los segundos, mientras que el suyo los separaba con un guion bajo
    • Teléfono del padre: añade los milisegundos justo después de los segundos → el número se vuelve más grande y se desplaza hacia atrás
    • Su teléfono: los separa con un guion bajo → se tratan como una cadena aparte
  • Solución: reordenar los nombres de archivo de uno de los dos lados para que sigan un patrón consistente
  • En KDE Dolphin se puede elegir desde las opciones un orden puramente alfabético, pero la configuración está escondida y resulta incómoda
  • Como cada programa ofrece funciones distintas, puede ser necesario ajustar la configuración por separado cada vez

Conclusión del autor

  • Critica que, aun cuando se especifica “orden alfabético”, el software intente adivinar la intención del usuario y aplique otro tipo de ordenamiento
  • Extraña el enfoque más simple de antes, cuando la computadora solo hacía exactamente lo que se le indicaba

1 comentarios

 
GN⁺ 2025-09-29
Opiniones de Hacker News
  • Creo que el método de ordenamiento adoptado por Microsoft, Google y KDE cubre casos más intuitivos y de uso más común; considero que la situación del autor es extremadamente rara, y me parece que la mayoría de la gente quiere mucho más a menudo que “10” venga después de “9”; los entornos de escritorio etiquetan el ordenamiento como “por nombre”, no “alfabético”, así que no hay confusión; no me encanta que la computadora intente leer la intención, pero como funciones como el autoguardado, eso sí resulta útil en la vida real; estaría bien tener también una opción de orden alfabético real, pero tiene sentido que el valor predeterminado sea el caso más intuitivo y común

    • Yo también soy lo bastante inteligente como para entender perfectamente que, en orden alfabético, “10” va antes que “9”; pero en el administrador de archivos quiero que “10” vaya después de “9”; tampoco me gusta poner un 0 delante de los números de un solo dígito, y si luego hacen falta tres dígitos, renombrar todo otra vez también es molesto; divido archivos de audiolibros por capítulos y, teniendo en cuenta que no todos los reproductores ordenan bien, uso formatos como “Chapter 01.mp3” o “Chapter 001.mp3”; incluso hice scripts de automatización, pero aun así se ve feo y es trabajo innecesario; de verdad sería mejor si todos los dispositivos reconocieran bien los números
    • No estoy de acuerdo; si hubiera una única y universal forma de expresar números como texto, lo entendería; pero hay muchas variaciones en cómo se introducen números, así que creo que esa función de “leer la intención” solo funciona bien en algunos casos; separadores decimales, separadores de miles, notación científica y demás son excepciones complejas, y cuando revisas los requisitos te das cuenta de que es difícil implementarlo de forma confiable
    • Me parece poco realista decir que poner ceros por delante es algo natural y familiar para la gente; por ejemplo, cuando una versión pasa de 5.9.17 a 5.10.0, nadie renombra todas las carpetas anteriores a 5.09.17; hoy en día el ordenamiento estándar no es ambiguo y es intuitivo, mientras que el orden estrictamente lexicográfico no encaja bien en una interfaz de usuario
    • El problema es que este cambio difiere del viejo orden alfabético “tonto”, y por eso sorprende y confunde a la gente; habría sido mejor separar el modo “inteligente” que quiere la mayoría del orden “alfabético estricto” como opciones distintas; si se pudiera elegir la opción de forma simple y clara, la experiencia no sería confusa ni siquiera para usuarios no técnicos
    • Dijiste que es más común querer que “10” vaya antes que “9”, pero probablemente quisiste decir lo contrario; y como referencia, el nombre formal de ordenar “por nombre” es “Natural sort order”
  • Este tema me recuerda al debate de “Worse is better”; el método simple de ordenamiento basado en ANSI/Unicode que pide el autor en realidad es una función que solo necesita una minoría de desarrolladores; en la práctica, el 99% de los usuarios de GUI quiere un orden intuitivo; identificar al usuario principal influye muchísimo en el diseño del producto; una función mejor puede encajar en un producto, pero para un sistema quizá la simplicidad sea más adecuada para crecer y evolucionar

    • El modelo mental del desarrollador es tratar de forma puramente ingenua nombres con números mezclados, mientras que un usuario normal considera natural que 10 venga después de 9; no se puede imponer a todo el mundo la forma de pensar de los desarrolladores
    • Me pregunto qué piensa la gente que dice que hace falta el modo “peor” sobre cómo debería ordenarse el uso de mayúsculas y minúsculas: si habría que seguir de verdad el orden de code points ASCII/Unicode, o normalizarlo como un solo carácter y agrupar mayúsculas y minúsculas juntas
    • No resulta convincente usar la excusa del “público objetivo” para no añadir opciones; no es difícil ofrecer ambas formas; el software que de verdad es mejor es el que acepta distintas necesidades, aunque sea poniéndolo en un modo avanzado; como en la regla 80/20, también hacen falta funciones que solo usa una minoría; cansa ver cómo se omiten funciones obvias con el pretexto de ajustarse a una visión perfecta del usuario
  • El ordenamiento automático es lo más incómodo cuando buscas archivos nombrados con hashes; en Windows es una de las pocas opciones que desactivo directamente desde el registro; a menudo extraño cuando las computadoras simplemente hacían lo que se les decía; ahora parece que no solo “leen la mente del usuario”, sino que intentan cambiarle hasta la forma de pensar, y eso me desagrada; me molesta esa mentalidad dogmática de “el usuario está equivocado”, incluso en el software de código abierto

    • Este problema no solo confunde con hashes simples, sino también con varios identificadores que tienen números sin significado en medio; cuando tienes que encontrar archivos con bloques numéricos como IDs de usuario o timestamps Unix, resulta incómodo ver cosas como abcd89764237 y abcd683426834 en posiciones que llaman la atención por lo raras, y tardar en darte cuenta de por qué están ahí
  • Si todos afirman saber cuáles son las necesidades del usuario promedio, entonces me pregunto por qué nadie propone que la computadora cambie automáticamente los nombres de archivo como quiera; si no van a imponer el orden ASCII, tampoco hay por qué aferrarse al nombre de archivo con extensión incluida; en la práctica, al usuario no le importan las extensiones jpg o png ni distingue mayúsculas de minúsculas; en el mundo Windows se usaron mucho las extensiones por compatibilidad heredada; me parece extraño que se impongan los “nombres de archivo estilo computadora” pero se rompa de forma tan obstinada el “ordenamiento estilo computadora”; como no se puede saber con certeza qué quiere el usuario, no habría que darlo por sentado

  • En la mayoría de los casos, siento que el ordenamiento basado en versiones que describe el artículo es mejor; hasta me parece un bug mostrarlo en orden alfabético; creo que el problema no es el concepto de ordenamiento, sino la etiqueta

    • En realidad no se describe como “alfabético”; el autor confundió “por nombre” con “alfabético”
    • El comportamiento descrito es útil, pero lo correcto sería avisarle al usuario de antemano o dejarle elegir la opción
    • El comando sort de Linux ahora también soporta ordenamiento por versión (sort -V); no conozco bien su funcionamiento interno, pero en la mayoría de los casos funciona bien y, sobre todo, es fácil activarlo o desactivarlo
    • El tipo de ordenamiento mencionado en el artículo es “lexical”, pero en promedio la gente no conoce la diferencia entre “lexical” y “alphabetic”
  • No se le está ordenando al sistema que ordene archivos “alfabéticamente”, sino “por nombre”, así que la interpretación puede variar según el OS; creo que, desde la perspectiva de la mayoría de los usuarios, eligieron la interpretación más adecuada basándose en lógica y datos; quizá en el futuro añadan reglas como usar el orden alfabético original cuando haya un 0 en el grupo numérico, o quizá aparezca una opción para que el usuario lo elija

    • Si un número con 0 delante se interpretara como octal y solo funcionara cuando los dígitos siguientes fueran de 0 a 7, tal vez sería intuitivo
    • Pero este cambio de interpretación ya ocurrió hace 10 o 20 años; antes, en muchos administradores de archivos, “por nombre” equivalía a “alfabético/de diccionario”
  • En macOS Foundation se ofrece oficialmente NSString.localizedStandardCompare(), que es lo que usa Finder para ordenar; Windows también ofrece StrCompareLogical, o sea que cada plataforma está formalizando el criterio de ordenamiento por nombre, es decir, el orden natural

    • Me pareció interesante porque pensaba que sería distinto de ls, y ahora creo que este método es mejor; en las apps de fotos normalmente se ordena por timestamp, y si de verdad necesitara un orden estricto por nombre, ordenaría por fecha de creación o normalizaría directamente los nombres de archivo
  • El informe de Unicode menciona claramente que el método de ordenamiento cambia según el contexto y el idioma; por ejemplo, si “A-10” se ordena alfabéticamente sin reconocer el número, “A-10” queda antes que “A-2”; es complejo, pero creo que por eso los navegadores de archivos hacen bien en optar por ordenamiento natural

    • Pero surge la duda de si no debería invertirse el orden, ya que -10 es menor que -2
  • Hacer que “foo9” quede antes que “foo10” es precisamente “natural sort”; hace poco descubrí una forma de hacer ordenamiento natural en Python con dos líneas de código y quedé muy satisfecho; recomiendo este código relacionado en Stack Overflow

    • El comando sort(1) también soporta ordenamiento natural (-V); si creas archivos de imagen y haces ls | sort -V, funciona correctamente; el resultado de du -sh * también puede ordenarse con la opción sort -h
  • No extraño el tipo de ordenamiento donde todo se mezclaba como “Image-1.jpg, Image-11.jpg, Image-2.jpg”; recuerdo que el ordenamiento natural se sentía extraño, pero cuando en Windows cambiaron a ordenar por valor numérico fue realmente cómodo; los archivos quedaban ordenados de una forma natural y me dejó bastante satisfecho

    • Pero también hay quien opina que ese orden sí era lo esperado, así que depende de cada persona