Jawaban:
sftp, suka cpdan scp, mengharuskan ketika Anda menyalin folder (dan isinya, jelas), Anda harus secara eksplisit mengatakan bahwa Anda ingin mentransfer folder secara rekursif dengan -ropsi.
Jadi, tambahkan -rke perintah.
-rke sftpperintah saat Anda terhubung. sftp -r user@host
Couldn't canonicalise: No such file or directory.
# sftp user@remote-host #> get -r remote-folder
Saya hanya bisa menyarankan, Anda gunakan rsync. Ini agak standar industri, ketika memindahkan file melalui koneksi yang aman.
rsync -alPvz ./source_dir server.com:destination_dir
Itu yang saya gunakan selama bertahun-tahun sekarang.
( -aopsi menangani hal-hal seperti rekursi direktori)
-a= rekursi + menyimpan tautan simbolis, izin, waktu modifikasi, pemilik, grup, file khusus dan file perangkat (yang terakhir memerlukan hak pengguna super); -l= simpan tautan simbolik (sudah termasuk dalam -a); -P= menunjukkan kemajuan selama transfer + menjaga file yang ditransfer sebagian; -v= mode verbose (namun tampaknya wajib saat digunakan -Puntuk menghindari kesalahan aneh (bug?) protocol version mismatch); -z= memungkinkan kompresi data yang ditransfer.
-lswitch harus digunakan atau tidak. Saya ingat versi yang lebih lama tidak termasuk -ldalam -a.
Anda mungkin juga bisa menggunakan penggunaan scp. Format umum adalah
scp -rp sourceDirName username@server:destDirName
scpberarti "salinan aman". Bendera adalah
-r berulang ke subdirektori-p Pertahankan waktu modifikasiSaya percaya barang-barang lainnya cukup jelas
Jika rsyncbukan merupakan pilihan, saya akan merekomendasikan selanjutnya lftp:
lftp sftp://user@host.com/path/path/
Kemudian gunakan mirrorperintah untuk mengunggah secara rekursif, seperti ini:
mirror -R
(Perhatikan bahwa rekursi adalah default. Ini -Runtuk membalikkan - untuk membuat unggahan perintah mirror alih-alih mengunduh. Coba tambahkan --dry-rununtuk melakukan uji coba untuk memastikan itu melakukan apa yang Anda harapkan.)
Atau untuk mengunggah tanpa rekursi:
mirror --no-recursion
Anda harus cdmasuk ke direktori yang ingin Anda mirror. Bagus sekali!
Jika Anda bisa, gunakan sshfs . Ini adalah sistem file FUSE , tersedia di sebagian besar Unix modern, dan berfungsi dengan server SFTP apa pun. Ini adalah sistem file jarak jauh: ini memungkinkan Anda untuk memanipulasi file jarak jauh (melalui protokol SFTP) dengan utilitas yang biasa.
mkdir /mount/point
sshfs server.example.com:/remote/path /mount/point
ls /mount/point
cp -Rp /mount/point/somedir /local/location
fusemount -d /mount/point
Ini agak kludge tapi yang berhasil bagi saya adalah:
sshuntuk masuk ke mesin jarak jauhsftpdari mesin jarak jauh ke mesin lokal Andagetperintah dengan -ropsi untuk memindahkan direktori dan semua file-nya.sftp> get -r data /opt/bin get: Invalid flag -r
Jika pertanyaan Anda sebenarnya 'bagaimana cara menggunakan sftp untuk mentransfer direktori', maka
sftp -r user@server
Tetapi jika Anda mentransfer direktori, saya mungkin menyarankan dua opsi yang lebih baik, tergantung pada kebutuhan Anda. sftpmembutuhkan login ke server jauh dalam prompt perintah seperti ssh, tetapi jika semua yang Anda inginkan adalah file, ada cara yang lebih mudah dan lebih cepat.
Scp
Untuk transfer satu kali, untuk mengunggah, coba:
# upload source directory to remote server
scp -rp source_dir user@server:dest
#download directory from remote server:
scp -rp user@server:source_dir dest
#specifying ssh key:
scp -rp -i ~/.ssh/key user@server:source_dir dest
#remote directory has spaces
scp -rp -i ~/.ssh/key user@server:"source\\ dir" dest
Rsync
Jika Anda berencana menyinkronkan direktori secara teratur, menggunakan rsync lebih masuk akal. Ia melakukan delta di antara dua direktori, menghemat waktu transfer dan data melalui kabel.
rsync -r -a -v -e ssh --delete source_dir user@server:dest
Berikut adalah daftar beberapa opsi rsync yang paling umum: ( diambil dari sini )
Semoga itu bisa membantu!
Anda bisa mendapatkan dari server ke jalur lokal Anda dengan
scp -rp user@server:directoryname(full path) .