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 ls
dá.
Resposta curta: Sim, será.
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.
$LC_COLLATE
).ls
no mesmo sistema.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:
No entanto, um globo usando o
*
não os retornará nesta ordem; em vez disso, você terá algo como: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.).fonte