การคัดลอกไฟล์โดยใช้ rsync จากเซิร์ฟเวอร์ระยะไกลไปยังเครื่องท้องถิ่น


319

เมื่อฉันได้ ssh ลงในเซิร์ฟเวอร์ระยะไกลของฉันคำสั่งจะคัดลอกไฟล์ทั้งหมดจากไดเรกทอรีไปยังไดเรกทอรีท้องถิ่นบนเครื่องของฉันได้อย่างไร


4
เพราะคุณสามารถrsyncโดยตรงจากเครื่องท้องถิ่นของคุณ
Johnsyweb

2
โอ้ ... ใช่ฉันทำได้ ฉันเห็นคำตอบอื่น ๆ ในขณะนี้ ขอบคุณ
markstewie

17
นี่เป็นงานทั่วไปสำหรับการพัฒนา (เว็บ) พร้อมคำตอบที่ดี ฉันไม่เห็นสาเหตุที่ปิดอยู่
d.raev

6
ฉันคิดว่า @ d.raev หมายถึงความจริงที่ว่าคำถามถูกปิดเป็นหัวข้อปิด (ถ้าฉันจำได้อย่างถูกต้องฉันตั้งค่าสถานะสำหรับคำถามนี้เพื่อโยกย้ายไปยัง SuperUser ซึ่งฉันคิดว่ามันเหมาะกว่า) แทนที่จะตอบไม่มี . ถึงกระนั้น ... มันดีที่ได้รับคำตอบของฉันหลังจากเวลานี้ทั้งหมด :-)
Johnsyweb

3
@markewewe ไม่มีความรู้สึกที่ไม่ดีมันเป็นคำถามที่ดีและมันก็ช่วยฉัน (ดูเหมือนว่าคนอื่น ๆ อีกมากมาย) แต่ "ปิด" นี้ทำให้ดูไม่ไว้วางใจที่คุ้มค่าดังนั้นฉันจึงไม่สนใจที่จะนำความสนใจบางอย่าง
d.raev

คำตอบ:


575

จากเครื่องท้องถิ่นของคุณ:

rsync -chavzP --stats user@remote.host:/path/to/copy /path/to/local/storage

จากเครื่องโลคัลของคุณด้วยพอร์ตที่ไม่ได้มาตรฐาน:

rsync -chavzP -e "ssh -p $portNumber" user@remote.host:/path/to/copy /local/path

หรือจากรีโมตโฮสต์สมมติว่าคุณต้องการทำงานแบบนี้จริงๆและเครื่องท้องถิ่นของคุณกำลังฟัง SSH:

rsync -chavzP --stats /path/to/copy user@host.remoted.from:/path/to/local/storage

ดูman rsyncคำอธิบายของสวิตช์ปกติของฉัน


255
คำอธิบายของคำสั่ง: explainshell.com/...
beefsack

118
ว้าวไซต์ที่อธิบายได้ดีมาก
gosukiwi

2
@cmcdragonkai: แท้จริงแล้วโฮสต์ในพื้นที่จะต้องใช้เซิร์ฟเวอร์ ssh และสามารถเข้าถึงได้จากโฮสต์ระยะไกล นี่เป็นหนึ่งในเหตุผลที่ฉันชอบวิธีแก้ปัญหาแรกในช่วงที่สอง
Johnsyweb

16
ระวังเมื่อ rsyncing กับเครื่องหมายทับต่อท้าย คำสั่งที่ได้รับจาก Johnnysweb /path/to/local/storageจะสร้างไดเรกทอรีที่เรียกว่าภายในสำเนา ชอบมาก/path/to/local/storage/copyๆ ถ้านั่นคือสิ่งที่คุณต้องการมาก อย่างไรก็ตามสถานการณ์ทั่วไปเพิ่มเติมคือคุณต้องการคัดลอกเนื้อหาของรีโมตไดเร็กทอรีลงในไดเร็กทอรีในโลคัลของคุณ จากนั้นคุณจะทำสิ่ง/path/to/copy/ที่จะวางเนื้อหาภายในไดเรกทอรี/path/to/local/storageโดยไม่ต้องสร้างไดเรกทอรีคัดลอกท้องถิ่น
chap

16
ฉันมาที่นี่เพื่อดูคำสั่ง rsync และฉันออกมาด้วยexplainshell.com ขอบคุณ @beefsack!
Cyphase

49

หากคุณมีการเข้าถึง SSH คุณไม่จำเป็นต้อง SSH ก่อนแล้วจึงคัดลอกเพียงใช้Secure Copy (SCP)จากปลายทาง

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

รองรับอักขระไวด์การ์ดได้

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

จะคัดลอกไฟล์ระยะไกลทั้งหมดในโฟลเดอร์นั้นหากคัดลอกมากกว่าหนึ่งไดเรกทอรี

note -r จะคัดลอกโฟลเดอร์ย่อยและเนื้อหาทั้งหมดด้วย


6
ทำไมต้องใช้scpมากกว่าrsync? และระวังว่าเชลล์ของคุณไม่พยายามขยายuser@host:/path/folder/*โดยใช้เครื่องหมายคำพูดเดี่ยว ( ')
Johnsyweb

ฉันพบว่า scp ใช้งานได้ง่ายกว่าจากปลายทาง .... โดยพื้นฐานแล้วมันคือการคัดลอกไฟล์ผ่าน ssh แต่ไม่จำเป็นต้องสร้างการเชื่อมต่อ ssh ก่อน
Tezyn

8
ฉันรู้ว่าscpคืออะไรนั่นไม่ใช่คำถามของฉัน ทำไมคุณไม่ใช้rsync? นี่คือสิ่งที่เป็นสิ่งที่คำถามที่ถามไม่จำเป็นต้องเซสชั่น SSH จัดตั้งขึ้นและscpมักจะได้เร็วขึ้นและมีประสิทธิภาพมากขึ้นกว่า
Johnsyweb

26
จำไว้ว่า scp ติดตาม symlink แทนการคัดลอก สิ่งนี้สามารถนำไปสู่การคัดลอกได้มากกว่าที่คุณคาดหวังและสูญเสีย symlink (ซึ่งจะกลายเป็นโฟลเดอร์ / ไฟล์ปกติ)
Mondane

2
คำตอบของ Mondane นั้นเป็นเหตุผลที่ฉันพบโพสต์นี้อย่างแม่นยำ โดยปกติแล้วฉันใช้ scp สำหรับทุกสิ่ง แต่ฉันต้องการรักษาสิทธิ์และ symlink จากเซิร์ฟเวอร์ไปยังเซิร์ฟเวอร์ นอกจากนี้ความแตกต่างความเร็ว (bc ตัวเองเป็นสมาชิกใหม่ของฉันก่อนแน่นอน) กว้างใหญ่
kyle
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.