Use find com scp ou rsync para enviar arquivos encontrados

Use find com scp ou rsync para enviar arquivos encontrados

Estou tentando executar um comando simples que procura um tipo de arquivo dedicado e, uma vez encontrado, copia esse arquivo e estrutura de diretório para um servidor remoto.

Por exemplo:

find Source/ -name *.CR2 | xargs -d '\n' cp --parents -t /STORAGE/location/ 

Neste caso, ele pega o arquivo encontrado e o copia para um diretório separado com a estrutura de pastas pai. Eu gostaria de fazer a mesma coisa com rsync ou scp.

Tentei algumas altercações no código abaixo, mas não tive sorte.

find /src/dir/ -name *.CR2 -printf %P\\0 \ | rsync -av -e ssh --files-from=- --from0 /src/dir/ remote@server:/Storage/

Qualquer ajuda seria apreciada.

Estou no processo de classificar anos de fotos de família e, em vez de encontrá-las em um diretório no meu array zfs e reescrevê-las em outro local no mesmo array (o que consome tempo), quero encontrá-las e enviá-las para um máquina separada onde eles serão classificados por tipo, executados e fdupes, em seguida, executados phockuppara classificá-los por data. Estou fazendo assim, caso eu estrague tudo, terei os arquivos originais sãos e salvos.

Editar: gostaria de agradecer às pessoas que responderam à minha pergunta. Felizmente encontrei uma solução antes de você responder, infelizmente não pensei em quão lenta seria a solução. Então optei por fazer do jeito que vinha fazendo anteriormente.

Este foi o código que funcionou para mim. Embora fosse necessário algumas transferências de chave ssh para funcionar corretamente, eu não precisaria inserir a senha para cada arquivo.

find Sorted/ -name *.JPG -exec rsync -a -e ssh --relative '{}' usr@remote:/1/2/3/ ';'

Vou tentar algumas das outras recomendações mencionadas e ver se elas são mais rápidas, mas do jeito que está, acabei apenas fazendo um script de shell que roda em segundo plano.

Obrigado novamente!

Responder1

find Source/ -type f -name '*.CR2' -print0 |
    rsync --dry-run -av --files-from - --from0 . remote@server:/Storage/

Remova --dry-runquando estiver satisfeito com o que está planejando fazer.

Responder2

Abaixo do comando podemos usar

 find  path -type f -iname "filename" -exec scp {} destinationhost:/var/tmp/ \;

informação relacionada