Em primeiro lugar, o /
será ignorado em sua localidade para classificação (você notará que todos os pesos, exceto o último, na especificação da coleção para /
é IGNORE
em um sistema GNU para a maioria dos locais) <U002F> IGNORE;IGNORE;IGNORE;<U002F> # 45 /
in /usr/share/i18n/locales/iso14651_t1_common
no meu sistema Debian)), então classificar asdf/20/0
em relação a asdf/2/01
é como classificar asdf200
em relação a asdf201
, como se você tivesse usado -d
.
Você pode alterar a localidade para C, onde a classificação é baseada somente no valor de byte (e /
ordena antes dígitos), então asdf/2/01
classificaria antes de asdf/20/0
as /
classifica antes de 0
, mas você ainda teria problemas com asdf/2
em relação a asdf/10
, por exemplo.
Aqui, você poderia usar a opção -g
/ --general-numeric-sort
específica do GNU, ou você poderia fazer:
sort -nt/ -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 -k6,6 -k7,7 -k8,8 -k9,9
Para considerar cada componente do diretório como um número (que classificará 2_ antes
Com zsh
, você pode fazer:
printf '%s\n' **/*(Dn)
para fazer um glob recursivo numericamente ordenado.