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

19

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

anthonybell
fonte

Respostas:

20

sftppossui recursos limitados. No entanto, o getcomando tem uma opção que pode fazer o truque: get -aconclui downloads parciais; portanto, se um arquivo já estiver presente no cliente e for pelo menos tão grande quanto o arquivo no 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 através do SFTP é usar o SSHFS . O SSHFS é um sistema de arquivos que usa SFTP para fazer com que um sistema de arquivos remoto apareça como um arquivo local. No cliente, o SSHFS requer o FUSE , disponível nas organizações mais modernas. No servidor, o SSHFS requer SFTP; se o servidor permitir SFTP, você poderá usar o SSHFS.

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 tirar proveito do 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 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 ao acesso SFTP. O acesso ao shell pode ser restrito ao comando rsync.

Gilles 'SO- parar de ser mau'
fonte
7

Você pode usar o -asinalizador para o getcomando:

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

Você pode especificar o *download de todo o diretório, é 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 pretende retomar 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 ele estiver universalmente disponível.

Stefano Palazzo
fonte