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.