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?
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?
Respostas:
A mágica das rsync
regras de filtro:
$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest
Consulte a rsync
pá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"
Se você precisar copiar esses arquivos, o cp fará:
cd dirA
find . -iname "*blah*" | xargs -If cp --parents f dirB
A opção --parents
preserva subdiretórios - cria o caminho completo do diretório para o destino.
Isso funcionou para mim:
rsync -ave 'ssh -p 22' --filter="+ */" --exclude="*_blah.blah" uid@555.55.555.55:/source/directory/ /destination/directory/
O -e
switch define o rsync
protocolo 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!