#!/bin/bash
while read mydir; do
echo "${mydir}:" >> output.txt
cat $mydir/*.txt >> output.txt
done < <(find test* -type d )
Isso está circulando por todos os diretórios dentro de directory1
e faz exatamente o que você quer. Por favor, note que você tem que executar este script dentro de directory1
.
Algumas explicações:
Primeiro find test* -type d
é executado, que imprime o nome de cada subdiretório por linha. Essa saída é então alimentada em read mydir
executando tudo dentro do loop while
uma vez para cada linha ( $mydir
é atribuído a cada linha (também conhecido como nome subdirectoy)).
Em seguida, a primeira linha dentro do loop grava o nome do diretório seguido por dois pontos em output.txt
, usando >>
, que significa "anexar a um arquivo" (se o arquivo não existir, ele será criado).
A segunda linha dentro do loop grava o conteúdo de cada arquivo *.txt
dentro do subdiretório para output.txt
, novamente em "append-mode".
Minha configuração de teste (com o script acima salvo como createfile.sh
):
$ ls *
test1:
fileA.txt
test2:
fileB.txt
test3:
fileC.txt
$ bash createfile.sh
$ cat output.txt
test1:
file content from dir1
test2:
test content from dir2
test3:
test content from dir3