- 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
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
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 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
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
sortde 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 desactivarloNo 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
En macOS Foundation se ofrece oficialmente
NSString.localizedStandardCompare(), que es lo que usa Finder para ordenar; Windows también ofreceStrCompareLogical, o sea que cada plataforma está formalizando el criterio de ordenamiento por nombre, es decir, el orden naturalls, 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 archivoEl 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
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
sort(1)también soporta ordenamiento natural (-V); si creas archivos de imagen y hacesls | sort -V, funciona correctamente; el resultado dedu -sh *también puede ordenarse con la opciónsort -hNo 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