Bagaimana cara mendapatkan seluruh direktori di sftp?

189

Saya baru belajar menggunakan sftp, dan saya ingin menyalin direktori dari komputer jarak jauh ke komputer lokal saya. Jika saya mencoba

get [directory]

ini memberi saya kesalahan ini:

Cannot download non-regular file: /home/mpirocch/Documents

get -R juga tidak bekerja.

Matius
sumber
2
Put / get rekursif ditambahkan ke OpenSSH di 5.4, yang dirilis pada 2010. Anda dapat mempertimbangkan untuk memutakhirkan server Anda karena juga menambahkan banyak perbaikan bug dan fitur keamanan yang lebih baik.
Lèse majesté

Jawaban:

266

Gunakan -rbendera (rekursif):

get -r *
mani-segar
sumber
16
Terima kasih telah memberikan jawaban yang sebenarnya menjawab pertanyaan.
jonnyflash
30
Memberi saya:get: Invalid flag -r
ghbarratt
2
Ini juga memberi saya bendera tidak valid. Saya tidak yakin ini didukung pada semua sistem.
Ben
@ Ben: Ketika saya menanyakan pertanyaan ini pada tahun 2009, -rbendera itu tidak ada. Apakah sistem Anda mutakhir?
Matius
15
@silvinci tidak semua sistem saat ini. Opsi ilegal dengan CentOS 6.4 openssh-klien-5.3p1-84.1.el6.x86_64
CrackerJack9
52

Menggunakan:

scp -r mpirocch@my-server:/home/mpirocch/Documents Documents
Cristian Ciupitu
sumber
3
Ini berfungsi, tetapi alangkah baiknya bisa melakukan ini dari SFTP (jadi saya bisa melihat apa yang saya salin sebelum saya salin). Apakah ini mungkin?
Matius
@ Matthew: Saya rasa tidak. Saya telah bertanya pada diri sendiri pertanyaan yang sama untuk beberapa waktu dan jawaban terbaik yang saya miliki untuk saat ini adalah scp -r. Atau Anda bisa menggunakan klien SFTP canggih seperti Filezilla.
Cristian Ciupitu
1
scp -r akan mengikuti symlinks ...
jsleuth
5
Beberapa sistem mungkin mengizinkan sftp, tetapi tidak scpmengakses.
Turion
40

Gunakan lftp:

lftp sftp://user@host

Kemudian, di dalam lftp, cdke direktori yang ingin Anda salin, dan gunakan mirrorperintah untuk mengunduh direktori yang dipilih secara rekursif, seperti ini:

mirror

Perintah ini menerima opsi dan argumen:

mirror [ PILIHAN ] [ sumber [ target ]]

Misalnya, opsi -R(atau --reverse) akan menyebabkannya mengunggah pohon direktori lokal ke direktori jarak jauh:

mirror -R

Lihat lftp(1)halaman manual di situs proyek atau di Debian.org untuk perintah dan opsi lain.

bshanks
sumber
4
+1 lftp seperti kumpulan sihir dan sukacita!
WCWedin
16

nah panduan kecil ini akan membantu, mirror server remote ke folder lokal dengan lftp

lftp sftp://user:[email protected]:22 -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'

  • sftp:// = menggunakan protokol SFTP
  • mirror = mode cermin
  • verbose = menunjukkan file yang sedang diunduh
  • use-pget-n = jumlah segmen, sangat berguna untuk mempercepat file besar
  • parallel = mengunduh file pengganda pada saat yang sama

jika Anda ingin mengunduh file secara paralel, ganti use-pget-n=8dengan--parallel=8

Semoga ini bisa membantu siapa saja yang perlu mem-mirror folder jarak jauh ke folder lokal

nwgat
sumber
Terima kasih, ini bekerja untuk saya, setelah metode lain gagal (khususnya tidak ada opsi "-r" di sftp). Bagian pertama dari perintah dalam kasus saya perlu dikutip, karena karakter dolar dalam kata sandilftp 'sftp://user:[email protected]:22' -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'
Jason
15

Jangan menggunakan program sftp secara langsung jika Anda dapat menemukan sesuatu yang lebih baik. Untuk Linux, banyak manajer file (setidaknya Nautilus dan Dolphin, yang GNOME dan KDE) mendukung sftp secara asli, dan selalu ada sshfs. Untuk windows, ada WinSCP, dan mungkin yang lainnya . Inti dari semua ini adalah untuk memungkinkan Anda mengakses file lebih dari sftp seolah-olah mereka berada di file filesem biasa, sehingga Anda tidak perlu peduli bahwa Anda mengaksesnya melalui sftp.

Ryan Thompson
sumber
Wow, nautilus bekerja sangat baik dengan SFTP. Saya menambahkan bookmark di Nautilus, dan sekarang semuanya sangat mudah. Terima kasih!
Matius
Saya memiliki masalah kinerja dengan Nautilus SFTP. Ya, itu benar-benar nyaman tetapi saya tidak bisa menjenuhkan jaringan 1 Gbit / s melalui Nautilus, sedangkan dengan sftp/sshantarmuka baris perintah biasa saya (cca 100 MB / s transfer file). Jadi masalahnya adalah Nautilus di GNU / Linux Mint.
stamster
13

Coba mgetalih-alih get.

Klarifikasi: mget akan berfungsi jika Anda berada di dalam direktori yang ingin Anda salin; jika Anda melakukan sesuatu seperti ini:

sftp> cd dir_to_get
sftp> mget *

itu akan mendapatkan semua file di direktori itu. Namun, itu tidak akan secara rekursif mendapatkan konten dari subdirektori apa pun.

Ken Keenan
sumber
1
mget tidak bekerja lebih baik daripada mendapatkan untuk saya.
Matius
1
mendapatkan Tidak dapat mengunduh file tidak biasa dengan ini
Dchris
1
Ini bekerja untuk saya pada sistem di mana 'get -r' tidak berfungsi.
Tchotchke
10
get -r [directory]

mendapat [directory]dan segala sesuatu di bawahnya, di mana rkepanjangan dari rekursif. Saya menemukan ini hanya dengan mengetik helpdari sftp.

drkvogel
sumber
1
IMO ini adalah jawaban terbaik untuk pertanyaan ini. :)
ramrunner
3
Ini adalah duplikat jawaban dari 29 November '10 (hampir satu setengah tahun yang lalu).
Cristian Ciupitu
5

Seperti dengan cp:

scp -rp user@host:/path/to/dir dir

Di atas akan menghemat waktu dan mode dari file dan subdirektori asli. Ini sangat berguna untuk pengambilan cadangan.

Aziraphale
sumber
Ini pada dasarnya adalah duplikat jawaban dari 29 November '10 (hampir dua tahun lalu).
Cristian Ciupitu
0

Saya memiliki folder Java dist di server jauh, di mana saya memiliki pohon berikut:

- dist
--- Audio.jar
--- README
--- lib
----- lib.jar

Sasarannya adalah: Saya ingin menggunakan SFTP? Dan letakkan di / tmp / <>

Langkah 1. sftp remoteuser @ ip

Langkah 2. cd / var / tmp

Langkah 2. lmkdir / tmp / dist; lmkdir / tmp / dist / lib

Langkah 3. lcd / tmp / dist

Langkah 4. mget *

Langkah 5. lcd / tmp / dist / lib

Langkah 6. mget *

Langkah 7. akhirnya saya memiliki tujuan saya

$ ls
Audio.jar  lib  README.TXT
YumYumYum
sumber