Saya mengalami masalah dalam mengunggah direktori (yang berisi direktori lain sedalam beberapa level) oleh sftp. Saya sadar saya bisa mengatasi ini dengan gzipping, tapi saya tidak mengerti mengapa itu perlu.
Lagi pula, saya mencoba
sftp> put bin/
Uploading bin/ to /home/earlz/blah/bin
bin/ is not a regular file
sftp> put -r bin/
Uploading bin/ to /home/earlz/blah/bin
Couldn't canonicalise: No such file or directory
Unable to canonicalise path "/home/earlz/blah/bin"
Saya pikir pesan kesalahan terakhir benar-benar bodoh. Jadi direktori itu tidak ada? Mengapa tidak membuat direktori?
Apakah ada masalah seputar sftp ini, atau haruskah saya menggunakan scp?
sftp
memungkinkanput -r
dari OpenSSH 5.4Saya tidak tahu mengapa sftp melakukan ini, tetapi Anda hanya dapat menyalin rekursif jika direktori tujuan sudah ada. Jadi lakukan ini ...
sumber
-r
membutuhkan OpenSSH 5.4 atau lebih tinggiAnda mungkin tertarik untuk menggunakannya
rsync
. Perintah untuk itu adalahIni akan menyalin semua
bin/
dan menempatkannya di server jauh di/home/earlz/blah/bin/
. Sebagai manfaat tambahan, pertama-tama akan memeriksa apakah file di sisi jarak jauh tidak berubah, dan jika tidak, itu tidak akan mengirim ulang. Selain itu, Anda dapat menambahkan opsi -z dan itu akan memampatkannya untuk Anda.sumber
sftp
adalah perintah dan protokol .rsync
tidak mendukungsftp
-protocol.lcd
: folder lokal Anda (dengan subfolder)cd
: folder jarak jauh Andaput -r .
sumber
cd
ke dalam direktori saya ingin mengunggah melakukannya. Terima kasih!Bolehkah saya menyarankan jawaban yang agak rumit, tanpa zipping, tetapi termasuk tar?
Kita mulai:
Ini akan mengemas direktori ./bin dengan tar (-cf: = buat file), nama file - (tidak ada, stdout) dan pipa melalui perintah ssh ke target.org (yang mungkin juga merupakan IP) di mana perintah dalam tanda kutip dilakukan, yaitu: cd to bla, dan tar -xf (ekstrak file) - tidak ada, tidak ada nama, hanya stdin.
Seolah-olah Anda mengemas paket di rumah, membawanya ke pos, lalu pergi bekerja, di mana Anda mengharapkan paket itu dan membukanya.
Mungkin ada solusi yang jauh lebih elegan yang hanya menggunakan sftp.
sumber
tar
adalah solusi yang sangat bagus, namun ini membutuhkanssh
dukungan login (sftp
protokol berbeda di atasssh
).tar
, tidak seperti yang lain, secara default , berjalan secara rekursif, mentransfer semua file khusus (FIFO, perangkat blok / karakter, dll.), mencoba menerjemahkan pemetaan UID / GID dari sumber ke sistem target dan memiliki perintah pendek tradisional. (Satu pengecualian: "soket domain Unix" tidak ditransfer. Tapi siapa yang butuh itu?)pv
alat ini untuk menonton kecepatan dalam transfer panjangAnda dapat menggunakan yafc (Namun klien FTP / SFTP anoter). The
-r
pilihan bekerja di sana sangat baik.sumber
Anda dapat menggunakan rsync , yang merupakan alternatif yang sangat kuat untuk scp dan sftp, terutama saat 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).
sebagai contoh :
Opsi -r adalah untuk menyalin file secara rekursif, -z memungkinkan kompresi selama transfer, dan -p mempertahankan izin file (pembuatan file, edit, dll.) Saat menyalin, yang merupakan sesuatu yang scp tidak lakukan AFAIK. Banyak lagi opsi yang dimungkinkan; seperti biasa, baca halaman manual.
Jawaban asli oleh Karolos
sumber
Login ke server jauh dengan ssh, gunakan sftp untuk menghubungkan kembali ke kotak Anda, kemudian gunakan
get -r
perintah untuk mentransfer direktori ke server jauh. Perintah get memungkinkan Anda untuk mentransfer direktori secara rekursif tanpa direktori yang sudah dibuat.sumber
Kasus SFTP:
Saya perlu menyalin struktur itu di ftp saya:
Itu memecahkan masalah saya:
sumber
Saya baru belajar dari Arch Linux Wiki bahwa adalah mungkin untuk me-mount sftp-share menggunakan sshfs. Saya menjalankan sftp-server dengan chroot dan jail dan sshfs bekerja dengan sangat baik.
sshfs <sftpuser>@<server>:<read/writable/directory> <your/local/mount/directory>
fusermount -u <your/local/mount/directory>
sumber