Me pregunto si es posible con get
archivos sftp
, pero ¿evitar que vuelva a descargar archivos que ya existen en la carpeta de destino?
sftp
Tiene capacidades limitadas. Sin embargo, el get
comando tiene una opción que puede hacer el truco: get -a
completa las descargas parciales, por lo que si un archivo ya está presente en el cliente y es al menos tan grande como el archivo en el servidor, no se descargará. Si el archivo está presente pero es más corto, se transferirá el final del archivo, lo que tiene sentido si el archivo local es el producto de una descarga interrumpida.
La forma más fácil de hacer cosas complejas a través de SFTP es usar SSHFS . SSHFS es un sistema de archivos que usa SFTP para hacer que un sistema de archivos remoto aparezca como un sistema de archivos local. En el cliente, SSHFS requiere FUSE , que está disponible en la mayoría de los dispositivos modernos. En el servidor, SSHFS requiere SFTP; si el servidor permite SFTP, puede usar SSHFS con él.
mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server
Tenga en cuenta que rsync a través de SSHFS no puede aprovechar el algoritmo de transferencia delta, porque no puede calcular sumas de verificación parciales en el lado remoto. Eso es irrelevante para una descarga única pero derrochador si está sincronizando archivos que han sido modificados. Para una sincronización eficiente de archivos modificados, use rsync -a server:/remote/path /local/path/
, pero esto requiere acceso de shell SSH, no solo acceso SFTP. Sin embargo, el acceso de shell puede restringirse al comando rsync.
Puede usar la -a
bandera para el get
comando:
$ sftp example.com
sftp> get -a hello.txt
Puede especificar *
descargar todo el directorio, por supuesto.
Sin embargo, hay algunas advertencias.
Una mejor opción sería usar rsync
:
rsync example.com:hello.txt
Esto siempre le dará el archivo tal como está en el servidor, solo transfiriendo las diferencias entre la copia local y la remota si difieren, y está disponible universalmente.