1 pontos por GN⁺ 2025-09-29 | 1 comentários | Compartilhar no WhatsApp
  • Ao tentar ordenar arquivos de foto em ordem alfabética, o resultado da ordenação difere entre o sistema operacional e o gerenciador de arquivos
  • No Linux, ls ordena corretamente, mas a maioria dos gerenciadores de arquivos com GUI, como Windows, Google Drive e KDE Dolphin, aplica "ordenação natural (natural sort)", interpretando nomes de arquivo com números de forma numérica
  • Por causa disso, file-10.txt pode vir antes de file-9.txt, gerando um resultado diferente da ordenação tradicional por strings
  • A causa real do problema foi que os dois celulares usavam convenções diferentes para nomes de arquivo: um colocava milissegundos logo após os segundos, enquanto o outro separava com underscore, mudando o critério de ordenação
  • No fim, a solução é apenas padronizar a convenção de nomes de arquivo ou ajustar configurações ocultas de cada gerenciador de arquivos, e o autor lamenta “a era em que o computador prioriza adivinhar a intenção do usuário em vez de seguir a instrução”

Contexto e situação do problema

  • O autor fez uma trilha com o pai, tirou fotos com os respectivos celulares Android e depois salvou todas em uma única pasta
  • O padrão dos nomes das fotos era IMG_YYYYMMDD_HHmmss ou esse formato seguido de números adicionais e .jpg
  • Como esses nomes seguem a ordem de ano, mês, dia e horário, ele presumiu que ordenar os arquivos em ordem alfabética (lexicográfica) os colocaria em ordem cronológica de captura
  • Ao usar Windows PC, Google Drive, KDE Dolphin etc., arquivos com o mesmo padrão não apareciam ordenados corretamente
    • Ex.: uma foto tirada às 5:54 no celular do pai aparecia antes de uma foto das 9:20 e depois de uma das 12:11, entre outros casos de ordenação incorreta
  • O mesmo resultado aparecia no Gnome e em outros gerenciadores de arquivos no smartphone
  • No comando ls do Linux, porém, a ordem era mantida corretamente, aumentando a confusão

Análise da causa

  • No começo, ele pensou que um dos celulares talvez estivesse usando um caractere estranho no lugar do underscore (_), mas ao verificar com o comando ls no Linux, a ordenação estava normal
  • Em várias distribuições Linux e até em um servidor OpenBSD, o ls ordenava corretamente em ordem alfabética
  • Em contraste, muitos gerenciadores de arquivos com GUI (Windows, Google Drive, KDE Dolphin etc.) comparam os números no nome do arquivo pelo valor numérico real
    • Ou seja, aplicam por padrão ordenação natural (natural sorting) em vez de ordem alfabética
  • Na ordenação natural, números dentro de strings são comparados não como caracteres isolados, mas como valores numéricos
    • Ex.: file-9.txt < file-10.txt → ordem que parece natural para humanos
    • Já na ordenação tradicional, como 1 < 9, file-10.txt viria antes
  • Porém, os gerenciadores modernos, quando encontram uma “parte numérica”, interpretam esse trecho como o valor real do número e forçam 9 a vir antes de 10
    • Isso pode divergir da ordem que o usuário pretendia ao criar os nomes dos arquivos

Causa real do problema e solução

  • O celular do pai colocava os milissegundos imediatamente após os segundos, enquanto o do autor separava com underscore
    • Celular do pai: anexa os milissegundos diretamente após os segundos → o número fica maior e vai mais para o fim
    • Celular do autor: usa underscore para separar → é tratado como uma string distinta
  • Solução: reorganizar os nomes de arquivo de um dos lados para um padrão consistente resolve o problema
  • No KDE Dolphin, é possível escolher a ordenação puramente alfabética nas opções, mas a configuração fica escondida e é incômoda de ajustar
  • Como os recursos variam entre programas, pode ser necessário configurar isso separadamente em cada um

Conclusão do autor

  • Mesmo tendo especificado “ordem alfabética”, ele critica o fato de o software tentar adivinhar a intenção do usuário e aplicar outra ordenação
  • Há saudade de um jeito mais simples, como antigamente, em que o computador fazia apenas o que foi mandado

1 comentários

 
GN⁺ 2025-09-29
Opinião do Hacker News
  • Acho que a forma de ordenação adotada por Microsoft, Google e KDE cobre casos mais intuitivos e mais comuns, e que a situação do autor é extremamente rara; parece que a maioria das pessoas prefere muito mais que “10” venha depois de “9”; como ambientes desktop exibem a ordenação como “por nome”, e não “alfabética”, não há mal-entendido; não gosto quando o computador tenta adivinhar a intenção, mas isso também é útil na vida real, como o salvamento automático; seria bom ter uma opção de ordenação realmente alfabética, mas faz sentido que o padrão seja o caso mais universal e intuitivo

    • Eu também sou inteligente o bastante para entender perfeitamente que, em ordem alfabética, “10” vem antes de “9”, mas no gerenciador de arquivos eu quero que “10” venha depois de “9”; também não gosto de colocar zeros à esquerda em números de um dígito, e se depois eu precisar de três dígitos, renomear tudo de novo é trabalhoso; quando separo arquivos de audiolivro por capítulo, uso formatos como “Chapter 01.mp3” ou “Chapter 001.mp3” pensando que nem todos os players vão ordenar corretamente; até fiz scripts de automação, mas ainda assim fica feio e é trabalho desnecessário; seria muito melhor se todos os dispositivos reconhecessem números direito
    • Eu não concordo; se existisse uma única forma universal de representar números como texto, eu até aceitaria, mas há muitas variações de entrada numérica, então esse recurso de “adivinhar a intenção” só funciona adequadamente em alguns casos; decimal, separador de milhar, notação científica etc. trazem exceções complexas, e quando se olha os requisitos fica claro que é difícil implementar isso de forma confiável
    • Não acho realista dizer que prefixar com zeros é algo natural e familiar para as pessoas; por exemplo, quando uma versão muda de 5.9.17 para 5.10.0, ninguém volta e renomeia todas as pastas antigas para 5.09.17; hoje o método de ordenação padrão é não ambíguo e intuitivo, enquanto a ordenação estritamente literal não é adequada para interfaces de usuário
    • O problema é que essa mudança difere da antiga ordenação alfabética “burra”, então ela surpreende e confunde as pessoas; teria sido melhor oferecer a forma “inteligente” que a maioria quer e a “alfabética estrita” como opções separadas; se a escolha da opção fosse simples e clara, nem usuários não técnicos teriam uma experiência confusa
    • Você disse que os casos em que se quer “10” antes de “9” são mais comuns, mas provavelmente quis dizer o contrário; e, a propósito, o nome formal da ordenação “por nome” é “Natural sort order”
  • Esse tema me lembra o debate de “Worse is better”; a ordenação simples baseada em ANSI/Unicode que o autor quer é, na verdade, uma função que só uma minoria de desenvolvedores precisa; na prática, 99% dos usuários de GUI querem uma ordenação intuitiva; identificar o público principal afeta enormemente o design do produto; uma função melhor pode combinar com um produto, mas para um sistema a simplicidade pode ser mais adequada para crescimento e evolução

    • O modelo mental do desenvolvedor é tratar de forma puramente ingênua nomes com números misturados, enquanto o usuário comum acha natural que 10 venha depois de 9; não dá para impor o modo de pensar dos desenvolvedores a todo mundo
    • Fico curioso sobre o que pensa da ordenação por maiúsculas e minúsculas quem defende que a forma “pior” é necessária; seguiria literalmente a ordem dos code points ASCII/Unicode, ou normalizaria como um único caractere para agrupar letras independentemente de caixa?
    • Não é convincente usar a desculpa de “público-alvo” para não adicionar opções; oferecer os dois modos não é algo difícil; um software que acomoda necessidades diversas, nem que seja em um modo avançado, é de fato melhor; funções usadas por poucos também são necessárias, como sugere a regra 80/20; cansa ver recursos óbvios sendo omitidos em nome de uma suposta visão perfeita do usuário
  • Ao procurar arquivos nomeados com hash, a ordenação automática é a coisa mais incômoda; no Windows, é uma das poucas opções que eu desativo direto pelo registro; sinto falta dos tempos em que o computador apenas fazia o que mandavam; hoje parece menos “ler a mente do usuário” e mais “tentar mudar até o pensamento”, e isso me incomoda; tenho aversão a essa mentalidade dogmática de que “o usuário está errado”, inclusive no open source

    • O problema não aparece só com hashes simples, mas também com vários identificadores que têm números sem significado no meio; quando preciso encontrar arquivos com blocos numéricos como ID de usuário ou timestamp Unix, coisas como abcd89764237 e abcd683426834 ficam em posições visivelmente estranhas, e eu demoro para perceber por quê
  • Todo mundo diz saber quais são as necessidades do usuário médio, então por que ninguém sugere que o computador simplesmente renomeie automaticamente os arquivos como quiser? Se não vamos impor a ordenação ASCII, também não há motivo para ficar preso a nomes de arquivo com extensão incluída; na prática, o usuário não liga para extensões como jpg ou png, nem para diferenciação entre maiúsculas e minúsculas; em sistemas da família Windows, extensões foram muito usadas por causa de compatibilidade antiga; é estranho impor “nomes de arquivo ao estilo do computador” e ao mesmo tempo insistir em quebrar só a “ordenação ao estilo do computador”; como não dá para saber exatamente o que o usuário quer, não se deve presumir

  • Para mim, na maioria dos casos essa ordenação baseada em versão descrita no artigo é melhor; mostrar em ordem alfabética chega a parecer um bug; o problema não é o conceito de ordenação, e sim o rótulo

    • Na prática, não se descreve isso como “alfabético”; o autor confundiu “por nome” com “alfabético”
    • O comportamento descrito é útil, mas o certo é avisar o usuário antes ou deixá-lo escolher a opção
    • O comando sort no Linux hoje também suporta ordenação por versão (sort -V); não conheço os detalhes internos, mas funciona bem na maioria dos casos e, acima de tudo, é fácil ligar ou desligar
    • O método de ordenação citado no artigo é “lexical”, mas em geral as pessoas não sabem a diferença entre “lexical” e “alphabetic”
  • A instrução não é ordenar arquivos “alfabeticamente”, mas ordenar “por nome”, então a interpretação pode variar de um sistema operacional para outro; acho que foi escolhida, com base em lógica e dados, a interpretação mais adequada para a maioria dos usuários; talvez no futuro surjam regras como usar a ordem alfabética original quando grupos numéricos tiverem zero à esquerda, ou talvez apareça uma opção de escolha do usuário

    • Se houver zero à esquerda, talvez fosse intuitivo tratar como octal e só funcionar quando os dígitos seguintes estiverem entre 0 e 7
    • Mas essa mudança de interpretação já aconteceu há 10 ou 20 anos; antes disso, em cada gerenciador de arquivos, “por nome” era basicamente o mesmo que “alfabético/dicionarizado”
  • No Foundation do macOS, NSString.localizedStandardCompare() é fornecido oficialmente para a ordenação usada pelo Finder; o Windows também oferece StrCompareLogical, ou seja, cada plataforma está formalizando esse critério de ordenação por nome, isto é, ordenação natural

    • Achei interessante porque esperava que fosse diferente do comando ls, e agora passei a achar esse método melhor; em apps de fotos, normalmente eu ordenaria por timestamp, e se eu realmente precisasse de ordenação estrita por nome, ordenaria por data de criação ou normalizaria manualmente os nomes dos arquivos
  • O relatório do Unicode menciona claramente que o modo de ordenação varia por idioma e contexto; por exemplo, se “A-10” for ordenado alfabeticamente sem reconhecer números, “A-10” virá antes de “A-2”; é complexo, mas acho que é por isso que navegadores de arquivos escolheram a ordenação natural

    • Mas, como -10 é menor que -2, não inverteria a ordem?
  • Fazer “foo9” vir antes de “foo10” é justamente “natural sort”; recentemente descobri uma forma de fazer ordenação natural em Python com duas linhas de código e fiquei muito satisfeito; recomendo este código relacionado no Stack Overflow

    • O comando sort(1) também suporta ordenação natural (-V); se você criar arquivos de imagem e usar ls | sort -V, funciona corretamente; a saída de du -sh * também pode ser ordenada com a opção sort -h
  • Não sinto falta da ordenação que misturava coisas como “Image-1.jpg, Image-11.jpg, Image-2.jpg”; lembro que a ordenação natural já me pareceu estranha, mas quando o Windows passou a ordenar pelo valor numérico ficou realmente muito mais confortável; os arquivos passaram a ficar em uma ordem natural e isso me agradou bastante

    • Mas há quem ache justamente essa ordem a esperada, então depende da pessoa mesmo