Usando find , sort e xargs :
find . -maxdepth 1 -type f -name 'file_*.pdb' -print0 |
sort -zV |
xargs -0 cat >all.pdb
O comando find localiza todos os arquivos relevantes e, em seguida, imprime seus nomes de caminho para sort que faz uma "classificação de versão" para colocá-los na ordem correta (se os números dos nomes de arquivos foram preenchidos com zero) largura fixa não precisaríamos de -V ). xargs pega essa lista de nomes de caminhos ordenados e executa cat nestes grupos em lotes tão grandes quanto possível.
Isso deve funcionar mesmo se os nomes de arquivos contiverem caracteres estranhos, como novas linhas e espaços. Usamos -print0 com find para fornecer nomes com sort nul-terminados para classificar e sort os manipula usando -z . xargs também lê nomes nul-terminados com seu -0 flag.
Observe que estou escrevendo o resultado em um arquivo cujo nome não corresponde ao padrão file_*.pdb .
A solução acima usa alguns sinalizadores não padrão para alguns utilitários. Eles são suportados pela implementação GNU desses utilitários e pelo menos pelo OpenBSD e pela implementação do macOS.
Os sinalizadores não padrão usados são
-
-maxdepth 1, para fazer com quefindentre apenas no diretório mais superior, mas sem subdiretórios. POSIXly, usefind . ! -name . -prune ... -
-print0, para tornarfindresultados de nomes terminados em nul (isto foi considerado por POSIX mas rejeitado). Pode-se usar-exec printf '%s.-z' {} + -
sort, para fazer com que-Vleve registros nul-terminados. Não há equivalência POSIX. -
sort, para tornar200sort, por ex.3após-0. Não há equivalência POSIX, mas pode ser substituída por uma classificação numérica em partes específicas do nome do arquivo, se os nomes dos arquivos tiverem um prefixo fixo. -
xargs, para fazerxargsler registros terminados em nulo. Não há equivalência POSIX. POSIXly, seria necessário citar os nomes dos arquivos em um formato reconhecido por-V.
Se os nomes dos caminhos são bem comportados, e se a estrutura de diretório é plana (sem subdiretórios), então pode-se fazer sem esses sinalizadores, exceto por sort with %code% .