Se nenhuma das respostas nos tópicos relacionados for o que você está procurando, considere usar o comando find , que pesquisará os diretórios recursivamente para baixo a partir de um determinado pai. Você pode especificar uma ação exec para executar em cada um dos arquivos correspondentes que encontrar - nesse caso, você deseja executar um cp em um novo diretório de destino
find /path/to/parent -name '*.txt' -exec cp -t /path/to/newdir {} +
O {} é substituído pelos arquivos que ele localiza e o + no final faz com que ele os agrupe de forma a não estourar o número máximo de argumentos que cp pode manipular em um comando. O newdir já deve existir.
Como você está movendo arquivos de vários lugares para um lugar, existe a possibilidade de alguns nomes não serem exclusivos e, portanto, você pode querer evitar que uma cópia anterior seja sobrescrita por uma cópia posterior. pode fazer isso adicionando uma opção backup
find /path/to/parent -name '*.txt' -exec cp --backup=numbered -t /path/to/newdir {} +
que adicionará um sufixo numerado simples a cada arquivo duplicado. Você pode adicionar um sinal -v ou --verbose ao cp se quiser ver um relatório em execução dos arquivos conforme eles são copiados.