sftp - como copiar apenas arquivos da pasta que não existem na pasta de destino

12

Eu estou querendo saber se é possível get arquivos com sftp , mas impedi-lo de baixar novamente os arquivos que já existem na pasta de destino?

    
por anthonybell 14.09.2015 / 01:23

2 respostas

13

sftp tem recursos limitados. No entanto, o comando get tem uma opção que pode funcionar: get -a conclui downloads parciais, portanto, se um arquivo já estiver presente no cliente e for pelo menos tão grande quanto o arquivo o servidor, ele não será baixado. Se o arquivo estiver presente, mas mais curto, o final do arquivo será transferido, o que faz sentido se o arquivo local for o produto de um download interrompido.

A maneira mais fácil de fazer coisas complexas sobre o SFTP é usar SSHFS . O SSHFS é um sistema de arquivos que usa SFTP para fazer um sistema de arquivos remoto aparecer como um filessytem local. No cliente, o SSHFS requer o FUSE , que está disponível na maioria dos unices modernos. No servidor, o SSHFS requer SFTP; Se o servidor permitir SFTP, você poderá usar o SSHFS com ele.

mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server

Observe que o rsync sobre SSHFS não pode aproveitar o algoritmo de transferência delta, porque não é possível calcular somas de verificação parciais no lado remoto. Isso é irrelevante para um download único, mas é um desperdício se você estiver sincronizando arquivos que foram modificados. Para sincronização eficiente de arquivos modificados, use rsync -a server:/remote/path /local/path/ , mas isso requer acesso ao shell SSH, não apenas acesso SFTP. O acesso ao shell pode ser restrito ao comando rsync.

    
por 14.09.2015 / 01:44
6

Você pode usar o sinalizador -a para o comando get :

$ sftp example.com
sftp> get -a hello.txt

Você pode especificar * para baixar o diretório inteiro, é claro.

No entanto, existem algumas ressalvas.

  • Isso não funciona no OS X. Pode não funcionar em outros sistemas. Eu testei no Ubuntu 15.04.
  • A opção destina-se a retomar os downloads interrompidos. Se o seu arquivo foi alterado, o resultado será um download corrompido.

Uma opção melhor seria usar rsync :

rsync example.com:hello.txt

Isso sempre fornecerá o arquivo como está no servidor, transferindo apenas as diferenças entre a cópia local e a remota, se elas diferirem, e estará disponível universalmente.

    
por 14.09.2015 / 01:41

Tags