Jawaban:
sftp
, suka cp
dan scp
, mengharuskan ketika Anda menyalin folder (dan isinya, jelas), Anda harus secara eksplisit mengatakan bahwa Anda ingin mentransfer folder secara rekursif dengan -r
opsi.
Jadi, tambahkan -r
ke perintah.
-r
ke sftp
perintah 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.
( -a
opsi 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 -P
untuk menghindari kesalahan aneh (bug?) protocol version mismatch
); -z
= memungkinkan kompresi data yang ditransfer.
-l
switch harus digunakan atau tidak. Saya ingat versi yang lebih lama tidak termasuk -l
dalam -a
.
Anda mungkin juga bisa menggunakan penggunaan scp
. Format umum adalah
scp -rp sourceDirName username@server:destDirName
scp
berarti "salinan aman". Bendera adalah
-r
berulang ke subdirektori-p
Pertahankan waktu modifikasiSaya percaya barang-barang lainnya cukup jelas
Jika rsync
bukan merupakan pilihan, saya akan merekomendasikan selanjutnya lftp
:
lftp sftp://user@host.com/path/path/
Kemudian gunakan mirror
perintah untuk mengunggah secara rekursif, seperti ini:
mirror -R
(Perhatikan bahwa rekursi adalah default. Ini -R
untuk membalikkan - untuk membuat unggahan perintah mirror alih-alih mengunduh. Coba tambahkan --dry-run
untuk melakukan uji coba untuk memastikan itu melakukan apa yang Anda harapkan.)
Atau untuk mengunggah tanpa rekursi:
mirror --no-recursion
Anda harus cd
masuk 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:
ssh
untuk masuk ke mesin jarak jauhsftp
dari mesin jarak jauh ke mesin lokal Andaget
perintah dengan -r
opsi 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. sftp
membutuhkan 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) .