sftp: télécharger tous les fichiers, répertoires et sous-répertoires contenus dans un dossier


27

Sur la machine AI ont le dossier

/home/a/

Sur la machine BI, le dossier

/home/b/

Je souhaite transférer tous les fichiers, répertoires et sous-répertoires de / home / a dans / home / b avec sftp Sur la machine, AI a essayé les commandes:

sftp fibon82@machineB.com
put /home/a/* /home/b/

mais cela ne fonctionne pas, j'obtiens le message d'erreur: "sauter un fichier non régulier / home / a / a1" ... [a1 est un sous-répertoire d'un]
Comment pourrais-je modifier l'instruction put?

Merci! :)

MODIFIER:

J'ai résolu en utilisant scp:

scp -r /home/a/ fibon82@machineB.com:/home/b/

2
put -raurait aussi fonctionné.
— WakiMiko

1
Ok mais comment pourrais-je savoir que pour "mettre la commande" l'option -r est disponible? Si je regarde ici, seul le drapeau -P est décrit ... Le même dans le manuel Merci! :)
— fibon82

Vous devriez plutôt poster cela comme réponse.
— NN

Oui. Au lieu de MODIFIER votre question avec la réponse, vous devez répondre à votre propre question et l'accepter.

@ fibon82 Pour un manuel à jour d'OpenSSH sftp, reportez-vous au projet OpenSSH .
— Martin Prikryl

Réponses:


21

Bien qu'il ne soit pas strictement équivalent à sftp, rsync est une alternative très puissante pour scp et sftp, en particulier lors de la mise à jour des copies de la machine A vers la machine B, car il ne copie pas les fichiers qui n'ont pas été modifiés; il est également capable de supprimer des fichiers de la machine B qui ont été supprimés de la machine A (uniquement lorsque cela est dit bien sûr).

Dans votre cas, la syntaxe serait

rsync -zrp /home/a/ user@remote.host.com:/home/b/

L' -roption est pour la copie récursive de fichiers, -zactive la compression pendant le transfert et -ppréserve les autorisations de fichier (création de fichier, modification, etc.) lors de la copie, ce que scp ne fait pas AFAIK. Beaucoup plus d'options sont possibles; comme d'habitude, lisez les manpages.


Ah merci! :) Une nouvelle chose que j'ai apprise!
— fibon82

@ fibon82: Vous êtes les bienvenus :)
— Karolos

1
je t'aime, j'ai synchronisé 400 Mo de données en 1 minute en utilisant simplement votre code. J'ajouterais que vous devriez également utiliser --progress sinon vous ne regarderez rien sans savoir ce qui se passe (et à quelle vitesse :))
— Sandro Antonucci

1
Malheureusement , rsyncne parle pas sftp-Protocole. Donc , si vous configurez un sftp-chroot en utilisant sshla construction de » eninternal-sftp puis rsyncéchoue.
— Tino

17

Dans sftpcette commande télécharge récursivement le contenu du répertoire courant dans le répertoire courant distant:

 put -r .

Tu vois man sftp.


Le -rcommutateur est pris en charge depuis OpenSSH 5.4 uniquement.
— Martin Prikryl

1
Notez que le -rcommutateur est côté client uniquement (partie de la sftpcommande). Ainsi, le côté serveur (ici: réception) n'a pas besoin d'OpenSSH 5.4, seul le client doit le prendre en charge.
— Tino

10

scp(copie sécurisée) est le Linux de facto pour le transfert de fichiers sur un tunnel sécurisé. Dans votre cas, vous souhaitez utiliser le commutateur récursif, par exemple:

scp -r /home/a/ user@remote.host.com:/home/b/

5
sftp et scp sont en fait des protocoles différents, tous deux basés sur ssh.
— paradroid

1
Oui, si le serveur autorise uniquement le protocole sftp, cette réponse ne fonctionne pas.
— 2013

4

Essayez d'utiliser

put -r /home/a/ /home/b/

pour plus d'informations consultez: ce


1
Le -rcommutateur est pris en charge depuis OpenSSH 5.4 uniquement.
— Martin Prikryl

Notez que le -rcommutateur est côté client uniquement (partie de la sftpcommande). Ainsi, le côté serveur (ici: réception) n'a pas besoin d'OpenSSH 5.4, seul le client doit le prendre en charge. Et: Cela devrait être la réponse acceptée , car obtenir (éventuellement non pris en charge) rsyncla réponse à une question balisée sftpest un peu déroutant.
— Tino

0

En fait, put -r devrait fonctionner. Mais le dossier de destination doit être présent sur votre hôte distant:

sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder
 Couldn't canonicalize: No such file or directory
 ....
sftp> mkdir sourcefolder
sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder/sourcefolder
 Entering sourcefolder/
 sourcefolder/file1
 sourcefolder/file2

Avez-vous ajouté une référence et une preuve à l'appui de ce que vous déclarez et confirmé que cette réponse n'est pas déjà répondue dans l'une des réponses existantes sur le post. Lisez "Pourquoi ai-je besoin de 50 points de réputation pour commenter" pour vous assurer que vous comprenez comment commencer à commenter.
— Pimp Juice IT

-1

Dans mon cas, ce rsyncn'était pas possible, j'ai donc utilisé:

mput -rp /home/a/ /home/b/

Il n'y a aucune mputcommande dans OpenSSH sftp. Vous parlez peut-être psftp?
— Martin Prikryl
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.