O * bash combina arquivos em ordem alfanumérica?

22

Eu quero concatenar vários arquivos juntos em ordem de nome de arquivo.

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

cat * 

i.e. a mesma ordem que ls dá.

    
por therefromhere 24.09.2010 / 13:25

2 respostas

22

Resposta curta: Sim, será.

Na página bash man :

After word splitting, unless the -f option has been set (see The Set Builtin), Bash scans each word for the characters ‘*’, ‘?’, and ‘[’. If one of these characters appears, then the word is regarded as a pattern, and replaced with an alphabetically sorted list of file names matching the pattern.

    
por 24.09.2010 / 13:43
7

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

Por exemplo, execute um teste sobre como maiúsculas e minúsculas são manipuladas para descobrir em seu sistema, bem como sequências de números.

Um problema comum em que me deparei ao ordenar listas de arquivos retornados por uma glob é o número de arquivos. Muitas vezes recebo arquivos numerados como:

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

No entanto, um glob usando o * não os retornará nessa 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 esse problema, você precisará fazer alguma manipulação na lista de arquivos retornada, ou renomear os arquivos para que os dígitos únicos tenham zero inicial (ou seja, blah_01.txt , blah_02.txt , etc.). / p>     

por 24.09.2010 / 17:06

Tags