sftp: unggah semua file, direktori, dan sub-direktori yang ada di dalam folder


27

Pada mesin AI memiliki folder

/home/a/

Pada mesin BI memiliki folder

/home/b/

Saya ingin mentransfer semua file, direktori dan sub-direktori dari / home / a in / home / b dengan sftp On machine AI mencoba perintah:

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

tetapi tidak berhasil, saya mendapatkan pesan kesalahan: "melewatkan file tidak biasa / home / a / a1" ... [a1 adalah sub-direktori dari a]
Bagaimana saya bisa memodifikasi instruksi put?

Terima kasih! :)

EDIT:

Saya dipecahkan menggunakan scp:

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

2
put -rakan bekerja juga.
WakiMiko

1
Ok tapi bagaimana saya bisa tahu bahwa untuk "put command" opsi -r tersedia? Jika saya melihat di sini hanya flag -P yang dijelaskan ... Hal yang sama dalam manual Terima kasih! :)
fibon82

Anda harus memposting itu sebagai jawaban.
NN

Iya nih. Alih-alih MENGEDIT pertanyaan Anda dengan jawabannya, Anda harus menjawab pertanyaan Anda sendiri dan menerimanya.

@ fibon82 Untuk manual terbaru untuk OpenSSH sftp, lihat proyek OpenSSH .
Martin Prikryl

Jawaban:


21

Meskipun tidak sepenuhnya setara dengan sftp, rsync adalah alternatif yang sangat kuat untuk scp dan sftp, terutama ketika memperbarui salinan dari mesin A ke mesin B, karena tidak menyalin file yang belum diubah; itu juga dapat menghapus file dari mesin B yang telah dihapus dari mesin A (hanya jika disuruh tentu saja).

Dalam kasus Anda, sintaksnya adalah

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

The -rpilihan adalah untuk rekursif menyalin file, -zmemungkinkan kompresi selama transfer, dan -pmempertahankan hak akses file (file penciptaan, mengedit, dll) ketika menyalin, yang merupakan sesuatu yang scp tidak melakukan AFAIK. Banyak lagi opsi yang dimungkinkan; seperti biasa, baca manhalamannya.


Terima kasih! :) Suatu hal baru yang saya pelajari!
fibon82

@ fibon82: Sama-sama :)
Karolos

1
Aku mencintaimu, aku menyinkronkan 400MB data dalam 1 menit hanya dengan menggunakan kode kamu. Saya akan menambahkan Anda juga harus menggunakan - kemajuan jika tidak Anda akan menatap apa-apa tanpa mengetahui apa yang terjadi (dan pada kecepatan apa :))
Sandro Antonucci

1
Sayangnya rsynctidak berbicara- sftpProtokol. Jadi jika Anda mengatur sftp-chroot menggunakan sshbuild ininternal-sftp maka rsyncgagal.
Tino

17

Dalam sftpperintah ini mengunggah konten direktori saat ini secara rekursif ke direktori remote saat ini:

 put -r .

Lihat man sftp.


The -rswitch didukung karena OpenSSH 5.4 saja.
Martin Prikryl

1
Perhatikan bahwa -rsakelar hanya sisi klien (bagian dari sftpperintah). Jadi sisi server (di sini: menerima) tidak perlu OpenSSH 5.4, hanya klien yang perlu mendukungnya.
Tino

9

scp(salinan aman) adalah Linux de facto untuk mentransfer file melalui terowongan yang aman. Dalam kasus Anda, Anda ingin menggunakan sakelar rekursif, misalnya:

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

5
sftp dan scp sebenarnya adalah protokol yang berbeda, keduanya berdasarkan ssh.
paradroid

1
Ya, jika server hanya mengizinkan protokol sftp, jawaban ini tidak berfungsi.
рüффп

4

Coba gunakan

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

untuk info lebih lanjut, periksa: ini


1
The -rswitch didukung karena OpenSSH 5.4 saja.
Martin Prikryl

Perhatikan bahwa -rsakelar hanya sisi klien (bagian dari sftpperintah). Jadi sisi server (di sini: menerima) tidak perlu OpenSSH 5.4, hanya klien yang perlu mendukungnya. Dan: Ini harus menjadi jawaban yang diterima , karena mendapatkan (yang mungkin tidak didukung) rsynckarena jawaban atas pertanyaan yang ditandai sftpagak membingungkan.
Tino

0

Sebenarnya, put -r harus bekerja. Tetapi folder destintion harus ada di host jarak jauh Anda:

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

Sudahkah Anda menambahkan referensi dan bukti yang mendukung apa yang Anda sebutkan dan mengonfirmasi jawaban ini belum dijawab dalam salah satu jawaban yang ada di pos. Baca "Mengapa saya perlu 50 reputasi untuk berkomentar" untuk memastikan Anda memahami bagaimana Anda dapat mulai berkomentar.
Pimp Juice,

-1

Dalam kasus saya rsynctidak mungkin jadi saya menggunakan:

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

Tidak ada mputperintah di OpenSSH sftp. Mungkin Anda merujuk psftp?
Martin Prikryl
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.