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.