* O bash corresponde aos arquivos em ordem alfanumérica?

25

Quero concatenar um monte de arquivos juntos em ordem de nome de arquivo.

É seguro assumir que isso me dará em ordem alfanumérica?

cat * 

ou seja, a mesma ordem que lsdá.

daí
fonte

Respostas:

26

Resposta curta: Sim, será.

Na página do manual do bash :

Após a divisão da palavra, a menos que a opção -f tenha sido definida (consulte The Set Builtin), o Bash verifica cada palavra em busca dos caracteres '*', '?' E '['. Se um desses caracteres aparecer, a palavra será considerada um padrão e substituída por uma lista classificada alfabeticamente de nomes de arquivos que correspondem ao padrão.

BloodPhilia
fonte
6
Observe que "alfabético" varia dependendo das configurações de localidade (em particular $LC_COLLATE).
grawity
4
@grawity true, mas resultaria na mesma saída que lsno mesmo sistema.
precisa saber é o seguinte
8

A resposta curta é sim, mas você precisa estar ciente de qual deve ser a ordem alfanumérica, pois pode não corresponder à ordem natural que você tem em mente.

Por exemplo, execute alguns testes sobre como as letras maiúsculas e minúsculas são tratadas para descobrir em seu sistema, bem como as seqüências de números.

Um problema comum que encontrei ao ordenar listas de arquivos retornados por um globo é os arquivos numerados. Muitas vezes recebo arquivos numerados como:

blah_1.txt
blah_2.txt
...
blah_10.txt
blah_11.txt

No entanto, um globo usando o *não os retornará nesta ordem; em vez disso, você terá algo como:

blah_1.txt
blah_10.txt
blah_11.txt
...
blah_2.txt
blah_20.txt
...

Então - para evitar este problema você ou necessidade de fazer alguma manipulação na lista retornada de arquivos, ou arquivos de mudar de modo que os únicos dígitos ter zero (ou seja blah_01.txt, blah_02.txt, etc.).

dtlussier
fonte