sftp - comment copier uniquement les fichiers d'un dossier qui n'existent pas dans le dossier de destination

19

Je me demande s'il est possible de getcréer des fichiers avec sftp, mais l'empêcher de retélécharger des fichiers qui existent déjà dans le dossier de destination?

anthonybell
la source

Réponses:

20

sftpa des capacités limitées. Néanmoins, la getcommande a une option qui peut faire l'affaire: get -atermine les téléchargements partiels, donc si un fichier est déjà présent sur le client et est au moins aussi volumineux que le fichier sur le serveur, il ne sera pas téléchargé. Si le fichier est présent mais plus court, la fin du fichier sera transférée, ce qui est logique si le fichier local est le produit d'un téléchargement interrompu.

La façon la plus simple de faire des choses complexes sur SFTP est d'utiliser SSHFS . SSHFS est un système de fichiers qui utilise SFTP pour faire apparaître un système de fichiers distant comme un système de fichiers local. Sur le client, SSHFS nécessite FUSE , qui est disponible sur la plupart des unités modernes. Sur le serveur, SSHFS nécessite SFTP; si le serveur autorise SFTP, vous pouvez utiliser SSHFS avec lui.

mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server

Notez que rsync sur SSHFS ne peut pas tirer parti de l'algorithme de transfert delta, car il est incapable de calculer des sommes de contrôle partielles sur le côté distant. Cela n'est pas pertinent pour un téléchargement unique, mais inutile si vous synchronisez des fichiers qui ont été modifiés. Pour une synchronisation efficace des fichiers modifiés, utilisez rsync -a server:/remote/path /local/path/, mais cela nécessite un accès au shell SSH, pas seulement un accès SFTP. L'accès au shell peut être limité à la commande rsync.

Gilles 'SO- arrête d'être méchant'
la source
7

Vous pouvez utiliser l' -aindicateur pour la getcommande:

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

Vous pouvez *bien sûr spécifier de télécharger l'intégralité du répertoire.

Cependant, il y a quelques mises en garde.

  • Cela ne fonctionne pas sur OS X. Il peut ne pas fonctionner sur d'autres systèmes. Je l'ai testé sur Ubuntu 15.04.
  • L'option est destinée à reprendre les téléchargements interrompus. Si votre fichier a changé, le résultat sera un téléchargement corrompu.

Une meilleure option serait d'utiliser rsync:

rsync example.com:hello.txt

Cela vous donnera toujours le fichier tel qu'il est sur le serveur, ne transférant les différences entre la copie locale et distante que si elles diffèrent, et il est universellement disponible.

Stefano Palazzo
la source