Saya tidak tahu mengapa sftp melakukan ini, tetapi Anda hanya dapat menyalin secara rekursif jika direktori tujuan sudah ada. Jadi lakukan ini...
sftp> mkdir bin
sftp> put -r bin
DIPERBAIKI :Awalnya saya salah mengklaim bahwa OpenSSH tidak mendukung put -r
. Ya, tetapi melakukannya 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
Yang sangat aneh adalah 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 Putty psftp
alat baris perintah sebagai gantinya. Ada di putty-tools
paket di bawah Debian (dan kemungkinan besar Ubuntu).
Bergantian, Filezilla akan melakukan apa yang Anda inginkan, jika Anda ingin menggunakan GUI.
Anda mungkin tertarik menggunakan rsync
alih-alih. 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 server jarak jauh di /home/earlz/blah/bin/
. Sebagai keuntungan tambahan, ini pertama-tama akan memeriksa untuk melihat apakah file di sisi jarak jauh tidak berubah, dan jika tidak, itu tidak akan dikirim ulang. Selain itu, Anda dapat menambahkan opsi -z dan opsi ini akan memampatkannya untuk Anda.