Mi chiedo se è possibile eseguire i get
file con sftp
, ma impedirgli di scaricare nuovamente i file già esistenti nella cartella di destinazione?
Mi chiedo se è possibile eseguire i get
file con sftp
, ma impedirgli di scaricare nuovamente i file già esistenti nella cartella di destinazione?
Risposte:
sftp
ha capacità limitate. Tuttavia, il get
comando ha un'opzione che può fare il trucco: get -a
completa i download parziali, quindi se un file è già presente sul client ed è grande almeno quanto il file sul server, non verrà scaricato. Se il file è presente ma più breve, la fine del file verrà trasferita, il che ha senso se il file locale è il prodotto di un download interrotto.
Il modo più semplice per eseguire operazioni complesse su SFTP è utilizzare SSHFS . SSHFS è un filesystem che utilizza SFTP per far apparire un filesystem remoto come un file system locale. Sul client, SSHFS richiede FUSE , che è disponibile sulla maggior parte dei moderni unices. Sul server, SSHFS richiede SFTP; se il server consente SFTP, è possibile utilizzare SSHFS con esso.
mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server
Nota che rsync su SSHFS non può sfruttare l'algoritmo di trasferimento delta, perché non è in grado di calcolare checksum parziali sul lato remoto. È irrilevante per un download una tantum, ma è inutile se stai sincronizzando i file che sono stati modificati. Per una sincronizzazione efficiente dei file modificati, utilizzare rsync -a server:/remote/path /local/path/
, ma ciò richiede l'accesso alla shell SSH, non solo l'accesso SFTP. Tuttavia, l'accesso alla shell può essere limitato al comando rsync.
Puoi usare il -a
flag per il get
comando:
$ sftp example.com
sftp> get -a hello.txt
Puoi specificare *
di scaricare l'intera directory ovviamente.
Tuttavia, ci sono alcuni avvertimenti.
Un'opzione migliore sarebbe usare rsync
:
rsync example.com:hello.txt
Questo ti darà sempre il file così com'è sul server, trasferendo le differenze tra la copia locale e quella remota solo se diverse, ed è universalmente disponibile.