Ordenação de nomes de arquivos no Linux - não puramente lexicográficos?

1

Dados alguns arquivos em um diretório data , o seguinte comando ls fornece um resultado surpreendente no sentido de como eles são ordenados:

for f in data/*; do echo $f;  done


data/CitiesBaselineCounts2015010520150112.49.csv
data/CitiesBaselineCounts2015010520150112.4.csv
data/CitiesBaselineCounts2015010520150112.50.csv
data/CitiesBaselineCounts2015010520150112.5.csv
data/CitiesBaselineCounts2015010520150112.6.csv
data/CitiesBaselineCounts2015010520150112.7.csv
data/CitiesBaselineCounts2015010520150112.8.csv
data/CitiesBaselineCounts2015010520150112.9.csv
data/CitiesBaselineCounts2015010520150112.csv

O caractere . é ascii 46 - que precede os códigos para todos os dígitos (48 a 57).

Então a ordenação é não lexicográfica. Quais são as regras para a classificação usada pelo comando ls ?

    
por javadba 15.08.2015 / 19:53

2 respostas

2

Quando você faz for f in data/* , a enumeração de nomes de arquivos está sendo feita pelo seu shell e não "ls". Normalmente, os shells classificarão lexicograficamente (o bash faz), mas eles podem usar sua ordem de seqüência de intercalação LC_COLLATE. Talvez sua concha em particular não seja ordenada.

As entradas de diretório geralmente não são classificadas, mas dependem do sistema de arquivos subjacente. Use ls -f para listar um diretório sem classificação.

Quando você diz ls * , primeiro o shell expande * e pode classificar o resultado, então ls ordenará os nomes dos arquivos novamente.

    
por 15.08.2015 / 20:35
1

ls, sort e seu script todos fornecem a mesma ordenação, que é lexicográfica com base no valor ASCII de cada posição, exceto que os não-alfanuméricos são ignorados

abc.
abc..
abc0
abc1
abc_1
abc.1
abc..1
abc.1.4
abc.1..4
abc.1.5
abc2
abc~2
abc_2
abc-2
abc.2
abc#2
abc%2
abc3
abc4
abc4.1
abc4.2
abc49
abc_9
abca
abcA
abcc

veja a resposta à pergunta 631402 para mais discussões, incluindo o desligamento da localidade, que lhe dá uma classificação lexicográfica por valor ASCII, incluindo símbolos

    
por 17.08.2015 / 17:24