A expansão de um curinga no Bash está garantida em ordem alfabética? Sou forçado a dividir um arquivo grande em pedaços de 10 Mb para que eles possam ser aceitos pelo meu repositório do Mercurial.
Então, eu estava pensando em usar:
split -b 10485760 Big.file BigFilePiece.
e depois no lugar de:
cat BigFile | bigFileProcessor
Eu poderia fazer:
cat BigFilePiece.* | bigFileProcessor
em seu lugar.
No entanto, não consegui encontrar em nenhum lugar que garantisse que a expansão do asterisco (aka curinga, aka *
) sempre estivesse em ordem alfabética, de modo que .aa
vinha antes .ab
(em oposição a pedidos de carimbo de data / hora ou algo assim).
Além disso, existem falhas no meu plano? Qual é o custo de desempenho cat
do arquivo juntos?
bash
files
wildcard
large-data
Trenó
fonte
fonte
sort
se precisar de alguma manipulação de pedido adicional.hg commit
em umN
arquivo MB, são necessários cerca de3 * N
MB de RAM ehg update
cerca de2 * N
MB de RAM. Isso ocorre com o Mercurial 1.5 no Linux.Respostas:
Sim, a expansão globbing é alfabética.
Na
man
página do Bash :fonte
ls -l [[:lower:]]
vez dels -l [a-z]
.mkdir lctest; cd lctest; touch w; touch z; ls -l [:lower:]; echo =====; ls -l [[:lower:]]
. O arquivo "z" é listado apenas pelo segundo,ls
porque está solicitando nomes de arquivo em letra minúscula. O primeirols
- aquele sem os colchetes externos - está solicitando nomes de arquivo com um único caractere na lista de caracteres ":", "l", "o", "w", "e" e "r". Nos dois casos, os colchetes mais externos delimitam uma expressão de colchete que lista caracteres e classes. No caso de[[:lower:]]
, os colchetes internos, dois pontos e a palavra nomeiam uma classe de caractere. ...É um comportamento documentado para
bash
que você possa confiar nos seus scripts. Isso também acontece com outros shells compatíveis com Bourne há muito tempo ... embora possa haver casos de canto em relação a caracteres não-alfanuméricos ou dobras de maiúsculas e minúsculas.(A lista resultante
bash
será em ordem quase "ASCII-betical" - exceto que as letras maiúsculas e minúsculas serão agrupadas como se não houvesse diferenças entre maiúsculas e minúsculas, mas com letras minúsculas antes dos equivalentes em maiúsculas. -alphabetics deve agrupar na mesma ordem em que aparecem em ASCII).Como outros salientaram, isso pode ser perturbado pelas configurações do ambiente relacionado ao idioma: LANG geralmente e LC_COLLATE mais especificamente. Pode ser mais seguro executar comandos que dependem de pedidos de expansão global sob um
env
comando para limpar o ambiente (usando-i
ou-u
conforme apropriado) ou canalizar os resultadossort
para garantir um seqüenciamento robusto.fonte
Embora as expansões glob sejam classificadas em ordem alfabética, elas também obedecem à configuração do idioma da concha.
Certifique-se de definir isso como "C" em seu script, se você pretende que seja portátil.
fonte