Como copiar um subconjunto de arquivos de um diretório, preservando a estrutura de pastas?

8

Quero mover algum subconjunto de arquivos de dirA para dirB (digamos, arquivos com "blah" no nome do arquivo), mas quero que todos os diretórios aninhados sejam os mesmos no novo local. Como eu posso fazer isso?

cstack
fonte
possível duplicata de filtro Rsync: copiar um padrão única
Gilles 'stop SO estar mal'

Respostas:

9

A mágica das rsyncregras de filtro:

$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest

Consulte a rsyncpágina de manual para obter detalhes sobre regras de filtro, mas aqui está a versão resumida para essa necessidade específica.

--filter="+ */" significa "incluir tudo o que é um diretório"

--filter="-! *blah* significa "excluir tudo que NÃO inclui blá no nome do arquivo"

pdo
fonte
3

Se você precisar copiar esses arquivos, o cp fará:

cd dirA
find . -iname "*blah*" | xargs -If cp --parents f dirB

A opção --parentspreserva subdiretórios - cria o caminho completo do diretório para o destino.

Joanna Kotuła
fonte
a sintaxe aqui é muito mais clara que o rsync
Matěj Šmíd
0

Isso funcionou para mim:

rsync -ave 'ssh -p 22' --filter="+ */" --exclude="*_blah.blah" [email protected]:/source/directory/ /destination/directory/

O -eswitch define o rsyncprotocolo de transferência com porta como -p 22. Além disso, as /barras finais são importantes para que o programa saiba que está lidando com diretórios.

Obrigado @pdo pelas horas extras no meu dia de trabalho!

Kambiz
fonte