Ao ter arquivos de texto simples, você pode mesclá-los sem dificuldades usando o operador >>
. Ele adicionará a saída do comando anterior ao final do arquivo especificado depois.
Procedimento básico (não para muitos arquivos)
Exemplo:
Imagine uma estrutura de diretórios como esta:
parent
|--a
| \--first.txt
\--b
\--second.txt
Agora, os conteúdos de a/first.txt
são
Hello! This is my first Textfile.
~~some lines~~
end
e b/second.txt
contêm
///////////////////
// //
// second file //
// //
///////////////////
Para que possamos mesclá-lo digitando:
$ touch merge.txt
$ cat a/first.txt >> merge.txt
$ cat b/second.txt >> merge.txt
Um novo arquivo vazio merge.txt
no diretório atual será criado e o conteúdo dos arquivos será adicionado sem sobrescrever, como >
faria.
merge.txt
agora contém:
Hello! This is my first Textfile.
~~some lines~~
end
///////////////////
// //
// second file //
// //
///////////////////
Feito!
Script avançado (para cobrir muitos arquivos em diretórios diferentes)
Se você tiver mais de dez arquivos, talvez até mesmo em dez diretórios diferentes, poderá criar um script bash e deixar que o computador faça toda a seleção e cópia por conta própria. Se você é completamente novo em bash ou shell script, eu recomendo que você leia um pouco antes sobre o que é capaz e obtenha uma compreensão básica da aparência de variáveis e loops, para que você não fique muito confuso.
Estou usando o topo do link como referência agora. Nosso script será basicamente assim:
#!/bin/bash
FILES="file1
/path/to/file2"
OUTPUT="merge.txt"
for f in $FILES
do
cat $f >> $OUTPUT
done
(Oh, espero que isso funcione)
Se todos os seus arquivos compartilharem algo que os diferencie de outros arquivos que não queremos mesclar, é exatamente disso que precisamos. Idealmente, eles compartilham uma pasta comum de pai ou mãe, onde você não pode encontrar nenhum outro arquivo além do nosso. Então, podemos simplesmente usar /the/path/to/that/folder/*
como seletor ao definir nossa variável $FILES
. Como você vê no modelo, podemos definir vários seletores. Espero que você não se importe muito com a ordem em que os arquivos serão selecionados automaticamente, caso contrário, teremos que pensar em alguma maneira de especificar isso ... Para nosso exemplo acima, poderíamos definir:
FILES="*/*"
ou FILES="*/*.txt"
ou FILES="a/* b/*"
ou mais e
OUTPUT="merge.txt"
, claro.
Algumas últimas reflexões
Talvez seja necessário prestar atenção ao não selecionar nosso arquivo de mesclagem com "*"
, o que pode ser um pouco estranho ... Acima, portanto, incluímos um /
everytime. Você também pode simplesmente colocá-lo em outro lugar.
Se seus arquivos seguirem um padrão, como p_some-thing-axy-1
, p_some-thing-axy-1
, p_some-thing-bxz-1
, você poderá escolher algum seletor como p_some-thing-*
ou mais.
Agora, espero que você possa fazer algum uso disso, porque eu estou fora.