Je me demande s'il est possible de get
créer des fichiers avec sftp
, mais l'empêcher de retélécharger des fichiers qui existent déjà dans le dossier de destination?
sftp
a des capacités limitées. Néanmoins, la get
commande a une option qui peut faire l'affaire: get -a
termine 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.
Vous pouvez utiliser l' -a
indicateur pour la get
commande:
$ 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.
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.