Ketika saya mencoba menggunakan sftp untuk mentransfer direktori yang berisi file, saya mendapatkan pesan kesalahan:
skipping non-regular file directory_name
Direktori ini berisi beberapa file dan dua subdirektori.
Apa yang saya lakukan salah?
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
kesftp
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.Itu yang saya gunakan selama bertahun-tahun sekarang.
(
-a
opsi menangani hal-hal seperti rekursi direktori)sumber
-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 adalahscp
berarti "salinan aman". Bendera adalah-r
berulang ke subdirektori-p
Pertahankan waktu modifikasiSaya percaya barang-barang lainnya cukup jelas
sumber
Ini bekerja untuk saya:
1) terhubung via
sftp
ke host jarak jauh2) ubah ke direktori jarak jauh yang ingin Anda salin. (Contoh: cd Music)
3) ubah ke direktori lokal yang ingin Anda salin. (Contoh: lcd Desktop)
4) Masalah perintah ini:
get -r *
sumber
Jika
rsync
bukan merupakan pilihan, saya akan merekomendasikan selanjutnyalftp
:Kemudian gunakan
mirror
perintah untuk mengunggah secara rekursif, seperti ini:(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:
Anda harus
cd
masuk ke direktori yang ingin Anda mirror. Bagus sekali!sumber
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.
sumber
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.sumber
sftp> get -r data /opt/bin get: Invalid flag -r
Jika pertanyaan Anda sebenarnya 'bagaimana cara menggunakan sftp untuk mentransfer direktori', maka
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:
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.
Berikut adalah daftar beberapa opsi rsync yang paling umum: ( diambil dari sini )
Semoga itu bisa membantu!
sumber
Anda bisa mendapatkan dari server ke jalur lokal Anda dengan
sumber