it-swarm-id.com

Mengunggah direktori dengan sftp?

Saya mengalami masalah dalam mengunggah direktori (yang berisi direktori lain sedalam beberapa level) oleh sftp. Saya sadar saya bisa mengatasi ini dengan gzipping, tetapi 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?

97
Earlz

DIKOREKSI : Awalnya saya salah mengklaim bahwa OpenSSH tidak mendukung put -r. Memang, tapi itu dengan cara yang sangat aneh. Tampaknya mengharapkan direktori tujuan sudah ada, dengan nama yang sama dengan direktori sumber.

sftp> put -r source
 Uploading source/ to /home/myself/source
 Couldn't canonicalize: No such file or directory
 etc.
sftp> mkdir source
sftp> put -r source
 Uploading source/ to /home/myself/source
 Entering source/
 source/file1
 source/file2

Apa yang aneh adalah bahwa ini bahkan berlaku jika Anda memberikan nama yang berbeda untuk tujuan:

sftp> put -r source dest
 Uploading source/ to /home/myself/dest
 Couldn't canonicalize: ...
sftp> mkdir dest
sftp> put -r source dest
 Uploading source/ to /home/myself/dest/source
 Couldn't canonicalize: ...
sftp> mkdir dest/source
sftp> put -r source dest
 Uploading source/ to /home/myself/dest/source
 Entering source/
 source/file1
 source/file2

Untuk put rekursif yang diimplementasikan dengan lebih baik, Anda dapat menggunakan alat baris perintah Putty psftp sebagai gantinya. Ada dalam PuTTY-tools paket di bawah Debian (dan kemungkinan besar Ubuntu).

Bergantian, Filezilla akan melakukan apa yang Anda inginkan, jika Anda ingin menggunakan GUI.

68
Jander

Saya tidak tahu mengapa sftp melakukan ini tetapi Anda hanya dapat menyalin rekursif jika direktori tujuan sudah ada. Jadi lakukan ini ...

sftp> mkdir bin
sftp> put -r bin
130
Useful Dude

Anda mungkin tertarik menggunakan rsync sebagai gantinya. Perintah untuk itu adalah

 rsync --delete --rsh=ssh -av bin/ remote-ip-or-fqdn:/home/earlz/blah/bin/

Ini akan menyalin semua yang ada di bin/ dan letakkan di dalam server jarak jauh di /home/earlz/blah/bin/. Sebagai manfaat tambahan, pertama-tama akan memeriksa untuk melihat 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.

22
Shawn J. Goff

lcd: folder lokal Anda (dengan subfolder)

cd: folder jarak jauh Anda

put -r .

9
eliseu

Bolehkah saya menyarankan jawaban yang agak rumit, tanpa zip, tetapi termasuk tar?

Kita mulai:

tar -cf - ./bin | ssh target.org " ( cd /home/earlz/blah ; tar -xf - ) "

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 sebuah paket di rumah, membawanya ke pos, lalu berkendara ke tempat kerja, tempat Anda mengharapkan paket itu dan membukanya.

Mungkin ada solusi yang jauh lebih elegan yang hanya menggunakan sftp.

8
user unknown

Anda dapat menggunakan yafc (Namun klien FTP/SFTP anoter). -r Opsi berfungsi dengan sangat baik.

2
Dmitry Shpakov

Anda dapat menggunakan rsync , yang merupakan alternatif yang sangat kuat untuk scp dan sftp, terutama ketika memperbarui salinan dari mesin A ke mesin B, karena tidak t 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 :

rsync -zrp /home/a/ [email protected]:/home/b/  

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

1
Sherlock

Login ke server jarak jauh dengan ssh, gunakan sftp untuk menghubungkan kembali ke kotak Anda, lalu gunakan get -r perintah untuk mentransfer direktori ke server jarak jauh. Perintah get memungkinkan Anda mentransfer direktori secara rekursif tanpa direktori yang sudah dibuat.

ssh remote ip
sftp local ip 
get -r whichever-dir
0
Cyb3rT00th

Kasus SFTP:

Saya perlu menyalin struktur itu di ftp saya:

mainfolder --- folder --- subfolder
                  |           |
              file1.txt   file2.txt

Itu memecahkan masalah saya:

cd ./mainfolder
mkdir folder
put -r /from/source/folder/* /mainfolder/folder/
cd ./folder
mkdir subfolder
put -r /from/source/folder/subfolder/* /mainfolder/folder/subfolder/
0

Saya baru saja 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.

  1. Mount: sshfs <sftpuser>@<server>:<read/writable/directory> <your/local/mount/directory>
  2. Lepas gunung: fusermount -u <your/local/mount/directory>
0
saltani