Você terá que fazer isso em duas etapas:
- Encontre todos os nomes de arquivos originais do Fasta.
- Para cada nome, encontre todos os arquivos com esse nome e concatene-os.
com código:
Encontre todos os arquivos do Fasta (isto assume o nome do arquivo sã sem novas linhas embutidas):
find . -type f -path '*/seq/in/*.fasta' -exec basename {} ';' | sort -u -o file.list
Em seguida, para cada nome, concatene todos os arquivos com o mesmo nome. Os arquivos resultantes serão colocados no diretório new
no diretório atual. O nome do novo arquivo será o mesmo dos arquivos concatenados.
mkdir new
while read -r name; do
find . -type f -path "*/seq/in/$name" -exec cat {} + >"new/$name"
done <file.list
A coisa que você pode deseja adicionar a cada uma das invocações find
é -mindepth 6 -maxdepth 6
(ou a profundidade apropriada, 6 pode estar desativada em um), para que os arquivos fiquem todos tiradas da mesma profundidade na hierarquia de arquivos. Insira essas opções antes de -type f
.
Alternativa sugerida pela steeldriver nos comentários, que ignora a criação de uma lista separada de nomes de arquivos Fasta:
mkdir new
find . -type f -path '*/seq/in/*.fasta' \
-exec sh -c 'for pathname do cat "$pathname" >>"new/${pathname##*/}"; done' find-sh {} +