sftp - come copiare solo file da una cartella che non esiste nella cartella di destinazione


19

Mi chiedo se è possibile eseguire i getfile con sftp, ma impedirgli di scaricare nuovamente i file già esistenti nella cartella di destinazione?

Risposte:


20

sftpha capacità limitate. Tuttavia, il getcomando ha un'opzione che può fare il trucco: get -acompleta 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.


7

Puoi usare il -aflag per il getcomando:

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

Puoi specificare *di scaricare l'intera directory ovviamente.

Tuttavia, ci sono alcuni avvertimenti.

  • Questo non funziona su OS X. Potrebbe non funzionare su altri sistemi. L'ho provato su Ubuntu 15.04.
  • L'opzione ha lo scopo di riprendere i download interrotti. Se il tuo file è cambiato, il risultato sarà un download danneggiato.

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.