Gostaria de saber se é possível get
arquivos com sftp
, mas impedi-lo de baixar novamente os arquivos que já existem na pasta de destino?
sftp
possui recursos limitados. No entanto, o get
comando tem uma opção que pode fazer o truque: get -a
conclui 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.
Você pode usar o -a
sinalizador para o get
comando:
$ sftp example.com
sftp> get -a hello.txt
Você pode especificar o *
download de todo o diretório, é claro.
No entanto, existem algumas ressalvas.
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.