Você pode fazer isso usando o comando cat e expansão de nome de arquivo . Se todos esses arquivos estiverem no diretório de origem /path/to/directory
e não houver outros arquivos nesse diretório, o comando mais sucinto será o seguinte:
cat /path/to/directory/*/*.txt > master.txt
Isso criará um arquivo chamado master.txt
em seu diretório atual que contém o conteúdo concatenado de todos os arquivos no diretório de origem. NOTA: Isso incluirá todos os arquivos em qualquer um dos subdiretórios do diretório de origem.
Se houver outros arquivos no diretório (ou se você quiser apenas ser um pouco mais preciso), então você pode usar este comando:
cat /path/to/directory/[a-z]/[a-z].txt > master.txt
Isso corresponderá apenas aos seguintes arquivos no diretório de origem:
a/a.txt
a/b.txt
a/c.txt
.
.
.
z/x.txt
z/y.txt
z/z.txt
Se houver outros arquivos no diretório de origem ou se você tiver arquivos semelhantes a a/z.txt
, em que o nome do subdiretório não corresponder ao nome base do arquivo e se você quiser excluir esses arquivos, então você teria que usar um comando mais preciso para restringir a lista de arquivos correspondentes. Nesse caso, você poderia usar expansor de chaves e um for-loop :
for letter in {a..z}; do \
cat "/path/to/directory/${letter}/${letter}.txt"; \
done >> master.txt
Isso corresponderá exatamente aos arquivos especificados em sua pergunta e a outros arquivos.