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.