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 phockup
para 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-run
quando 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/ \;