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.