Menyalin file menggunakan rsync dari server jauh ke mesin lokal

319

Setelah saya ssh'd ke server jauh saya, apa perintahnya untuk menyalin semua file dari direktori ke direktori lokal di komputer saya?

Markstewie
sumber
4
Karena Anda bisa rsynclangsung dari mesin lokal Anda.
Johnsyweb
2
Oh ... ya saya bisa. Saya melihat jawaban lain sekarang. Terima kasih.
markstewie
17
Ini adalah tugas umum untuk pengembangan (web) dengan jawaban yang bagus. Saya tidak melihat mengapa itu masih ditutup.
d.raev
6
Saya pikir @ d.raev merujuk pada fakta bahwa pertanyaan ditutup sebagai off topic (jika saya ingat dengan benar saya menandai agar pertanyaan ini dimigrasikan ke SuperUser, di mana saya pikir itu lebih cocok) daripada daripada tidak ada jawaban yang diterima . Tetap saja ... senang menerima jawaban saya setelah sekian lama. :-)
Johnsyweb
3
@markstewie tidak ada perasaan buruk, itu adalah pertanyaan yang bagus dan itu membantu saya (sepertinya banyak orang lain juga) tetapi ini "tertutup" membuatnya tampak tidak percaya layak jadi saya tidak akan membawa perhatian padanya.
d.raev

Jawaban:

575

Dari mesin lokal Anda:

rsync -chavzP --stats [email protected]:/path/to/copy /path/to/local/storage

Dari mesin lokal Anda dengan port ssh non standar:

rsync -chavzP -e "ssh -p $portNumber" [email protected]:/path/to/copy /local/path

Atau dari host jarak jauh, dengan asumsi Anda benar-benar ingin bekerja dengan cara ini dan mesin lokal Anda mendengarkan di SSH:

rsync -chavzP --stats /path/to/copy [email protected]:/path/to/local/storage

Lihat man rsyncpenjelasan tentang sakelar saya yang biasa.

Johnsyweb
sumber
255
Penjelasan tentang perintah: menjelaskanshell.com/...
beefsack
118
Wow itu menjelaskan situs shell is awesome.
gosukiwi
2
@cmcdragonkai: memang, host lokal harus menjalankan server ssh dan dapat diakses oleh host jarak jauh. Ini adalah salah satu alasan mengapa saya lebih suka solusi pertama daripada yang kedua.
Johnsyweb
16
Hati-hati saat rsyncing dengan garis miring. Perintah yang diberikan oleh Johnnysweb akan membuat direktori bernama copy di dalamnya /path/to/local/storage. Seperti itu /path/to/local/storage/copy. Jika itu yang Anda inginkan hebat. Namun skenario yang lebih umum adalah Anda ingin menyalin isi direktori jarak jauh ke direktori di lokal Anda. Maka Anda akan melakukan /path/to/copy/yang akan menempatkan konten di dalam direktori /path/to/local/storagetanpa membuat direktori copy lokal.
bab
16
Saya datang ke sini untuk perintah rsync dan saya pergi dengan menjelaskanshell.com . Terima kasih @ beefsack!
Cyphase
49

Jika Anda memiliki akses SSH, Anda tidak perlu SSH terlebih dahulu dan kemudian salin, cukup gunakan Secure Copy (SCP) dari tujuan.

scp user@host:/path/file /localpath/file

Karakter wild card didukung, jadi

scp user@host:/path/folder/* /localpath/folder

akan menyalin semua file jarak jauh di folder itu. Jika menyalin lebih dari satu direktori.

note -r akan menyalin semua sub-folder dan konten juga.

Tezyn
sumber
6
Mengapa menggunakan scpbukan rsync? Juga, perhatikan bahwa shell Anda tidak mencoba untuk mengembang user@host:/path/folder/*, mungkin dengan menggunakan tanda kutip tunggal ( ').
Johnsyweb
Saya menemukan scp lebih mudah digunakan dari tujuan .... Pada dasarnya itu adalah salin file melalui ssh, tetapi tanpa harus membuat koneksi ssh terlebih dahulu.
Tezyn
8
Saya tahu apa scpitu, itu bukan pertanyaan saya. Kenapa kamu tidak menggunakan rsync? Inilah yang ditanyakan oleh pertanyaan itu, tidak memerlukan sesi SSH yang mapan dan seringkali lebih cepat dan lebih efisien daripada scp.
Johnsyweb
26
Ingat, scp mengikuti symlink daripada menyalinnya. Hal ini dapat menyebabkan penyalinan lebih dari yang Anda harapkan dan hilangnya symlink (mereka menjadi folder / file normal).
Mondane
2
Tanggapan Mondane justru menjadi alasan saya menemukan pos ini. Biasanya, saya menggunakan scp untuk semuanya, tapi saya harus menjaga izin dan symlink dari server ke server. Juga, perbedaan kecepatan (bc diri pendatang baru saya pasti mengalah dulu) sangat luas.
kyle