แทนที่จะใช้ tar เพื่อเขียนไปยังดิสก์ภายในเครื่องของคุณคุณสามารถเขียนโดยตรงไปยังเซิร์ฟเวอร์ระยะไกลผ่านเครือข่ายโดยใช้ ssh
server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"
สตริงใด ๆ ที่ตามหลังคำสั่ง "ssh" ของคุณจะถูกเรียกใช้บนเซิร์ฟเวอร์ระยะไกลแทนการเข้าสู่ระบบแบบโต้ตอบ คุณสามารถไพพ์อินพุต / เอาต์พุตไปยังและจากคำสั่งรีโมตผ่าน SSH ราวกับว่าเป็นโลคัล การวางคำสั่งในเครื่องหมายคำพูดหลีกเลี่ยงความสับสนโดยเฉพาะอย่างยิ่งเมื่อใช้การเปลี่ยนเส้นทาง
หรือคุณสามารถแตกไฟล์ tar บนเซิร์ฟเวอร์อื่น ๆ ได้โดยตรง:
server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"
หมายเหตุ-C
ตัวเลือกที่ไม่ค่อยใช้ หมายถึง "เปลี่ยนไดเรกทอรีนี้ก่อนทำอะไรก็ได้"
หรือบางทีคุณอาจต้องการ "ดึง" จากเซิร์ฟเวอร์ปลายทาง:
server2$ tar -zx -C /destination < <(ssh server2 "tar -zc -C /srcdir ./path")
โปรดทราบว่า <(cmd)
โครงสร้างนั้นใหม่ต่อการทุบตีและไม่สามารถใช้กับระบบเก่าได้ มันรันโปรแกรมและส่งออกไปยังไปป์และทดแทนไปป์นั้นในคำสั่งราวกับว่ามันเป็นไฟล์
ฉันสามารถเขียนข้างต้นได้อย่างง่ายดายดังนี้:
server2$ tar -zx -C /destination -f <(ssh server2 "tar -zc -C /srcdir ./path")
หรือเป็นดังนี้:
server2$ ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination
หรือคุณสามารถช่วยตัวเองให้เศร้าโศกและใช้ rsync:
server1$ rsync -az ./path server2:/destination/
สุดท้ายจำไว้ว่าการบีบอัดข้อมูลก่อนที่จะโอนจะลดแบนด์วิดธ์ของคุณ แต่ในการเชื่อมต่อที่รวดเร็วมากก็จริงอาจทำให้การดำเนินการจะใช้เวลามากขึ้น นี่เป็นเพราะคอมพิวเตอร์ของคุณอาจไม่สามารถบีบอัดได้เร็วพอที่จะติดตามได้: หากการบีบอัด 100MB ใช้เวลานานกว่าที่จะส่ง 100MB แสดงว่าการส่งบีบอัดนั้นไม่เร็วกว่า
อีกวิธีหนึ่งคุณอาจต้องการพิจารณาไพพ์เพื่อ gzip ด้วยตัวคุณเอง (แทนที่จะใช้ตัวเลือก -z) เพื่อให้คุณสามารถระบุระดับการบีบอัดได้ เป็นประสบการณ์ของฉันที่การเชื่อมต่อเครือข่ายที่รวดเร็วด้วยข้อมูลที่บีบอัดได้โดยใช้ gzip ที่ระดับ 2 หรือ 3 (ค่าเริ่มต้นคือ 6) ให้ปริมาณงานโดยรวมที่ดีที่สุดในกรณีส่วนใหญ่ ชอบมาก
server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"