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 [email protected]
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/ [email protected]:/home/b/
fibon82
la source
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/ [email protected]:/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.

Karolos
la source
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.

Carlos Da Costa
la source
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/ [email protected]:/home/b/
deed02392
la source
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

guest_who
la source
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
Dieter
la source
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/
jayarjo
la source
Il n'y a aucune mputcommande dans OpenSSH sftp. Vous parlez peut-être psftp?
Martin Prikryl