เปลี่ยนเป็น stdout ไหม


6

ฉันสามารถเข้าถึงเซิร์ฟเวอร์สำรองได้ทางโปรโตคอล rsync (เฉพาะ rsync เท่านั้น) ตอนนี้ฉันต้องการดึงไฟล์จากที่นั่น (ซึ่งคือ. tar.gz) และส่งต่อไปยังคำสั่ง tar โดยตรงโดยไม่ต้องบันทึกไฟล์เก็บถาวรในระบบไฟล์ในเครื่อง

เมื่อต้องการเห็นภาพด้วยการเข้าถึง ssh ฉันสามารถ:

ssh remote_host cat backup.file.tar.gz | tar xzf -

และฉันจะได้รับการสำรองข้อมูลที่ไม่มีการบีบอัดในเครื่องโดยไม่ต้องเก็บ. tar.gz ไว้ในเครื่องของคุณ

มันเป็นไปได้ที่จะประสบความสำเร็จเมื่อใช้ rsync?

linux  shell  rsync  tar  pipe 

คำตอบ:


4

โดยปกติคุณสามารถใช้ pipe ที่มีชื่อได้เช่น:

mkfifo mypipe
tar xzf mypipe &
rsync --inplace server:/remote/file.tar.gz mypipe

อย่างไรก็ตาม rsync นั้นฉลาดเกินไปเพราะมันเป็นของตัวเองที่ดีเพราะมันรับรู้ว่าไฟล์ระยะไกลเป็นไฟล์ปกติและ local ท้องถิ่นเป็นไพพ์ ดังนั้นก่อนอื่นให้ลบไพพ์จากนั้นโอนไฟล์รีโมต scpไม่มีปัญหานี้และจะส่งข้อมูลอย่างมีความสุขไปยังไปป์ที่ระบุชื่อ (น่าเสียดายที่ไม่ได้ช่วยคุณที่นี่)


ตอบเครื่องหมายถูก @ user7385
macetw

1

เพื่อทำให้สั้น: คุณทำไม่ได้ rsync ทำงานโดยการพูดคุยระหว่าง 2 อินสแตนซ์ของ rsync (ฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์) เพื่อค้นหาความแตกต่าง tar ไม่สามารถพูด 'rsyncish'


แต่หนึ่งในไคลเอนต์สามารถ (ในทางทฤษฎี) อย่างใดเขียนไปป์แทนไฟล์

3
โปรโตคอล rsync ต้องการการสื่อสารแบบสองทาง - เพล็กซ์เต็มรูปแบบในช่องทางเดียว สิ่งนี้ไม่สามารถทำได้กับท่อ แต่เป็นแบบง่าย ๆ เท่านั้น rsync ทั้งหมดที่ส่งไปยัง stdout เป็นข้อมูลสถานะ
David Spillett

ไม่แน่ใจว่าโปรโตคอล rsync เกี่ยวข้องกับเอาท์พุตอย่างไร ฉันไม่ได้พูดถึงการแทนที่ rsync ด้วย tar ฉันกำลังพูดถึงการสร้างไฟล์เขียนไคลเอ็นต์ rsync (เช่นดาวน์โหลดด้วยตัวเลือก - ทั้งไฟล์เพื่อป้องกันการค้นหาและตรวจสอบการตรวจสอบ) ไปป์ไลน์ไม่ใช่ไปที่ไฟล์

0

ฉันไม่คิดอย่างนั้น แต่คุณอาจจะสามารถใช้scp:

scp file /dev/stdout

จะคัดลอกไฟล์ไปยังเอาต์พุตมาตรฐาน scpคุณสามารถเพิ่มผู้ใช้ระยะไกลที่จำเป็นและเป็นเจ้าภาพข้อมูลแหล่งที่มาของไฟล์เพื่ออาร์กิวเมนต์บรรทัดคำสั่งของ


ตามที่ฉันพูดถึง: ฉันไม่มี ssh / scp เพียงเข้าถึง rsync

2
@depesz: ขออภัยฉันไม่เห็นที่ที่คุณพูดถึง
Dennis Williamson

"ฉันสามารถเข้าถึงเซิร์ฟเวอร์สำรองข้อมูลผ่านโปรโตคอล rsync" ฉันไม่ได้พูดถึงการเข้าถึงโดย ssh เพราะฉันไม่มี ฉันยังไม่ได้พูดถึงโปรโตคอลอื่น ๆ - ฉันเพิ่งจะมี rsync

0

rsync สามารถใช้ได้เฉพาะโปรโตคอล rsh หรือ ssh เท่านั้น หากคุณไม่ได้ใช้ ssh จะต้องใช้ rsh เพียงแทนที่ ssh ด้วยคำสั่ง rsh:

rsh remote_host cat backup.file.tar.gz | tar xzf -


1
rsync สามารถใช้ได้เฉพาะโปรโตคอล rsync เท่านั้น มันพูดผ่านสิ่งที่เป็นไปได้ชาแนล
akira

@akira, ในโหมด daemon, ใช่ฉันลืมที่จะฟังพอร์ต 873 มันสามารถกำหนดค่าให้ใช้ rsh หรือ ssh ได้โดยไม่ต้องใช้ daemon
TD1

1
@Tim Deichelbohrer: ไม่เสมอไป หากมันทำงานผ่าน ssh "daemon" (ดีกว่า "ผู้ส่ง") จะถูกเปิดใช้งานตามความต้องการและกำลังพูดคุยกับลูกค้าผ่านทาง stdin / stdout อ่านsamba.anu.edu.au/rsync/how-rsync-works.html "การเริ่มต้นกระบวนการ"
akira

@Tim: ฉันไม่มีสิทธิ์เข้าถึง rsh / ssh - อย่างที่ฉันบอก - ฉันมีสิทธิ์เข้าถึง rsync เท่านั้น

@akira: rsync ไม่ต้องการ rsh / ssh มันมีเซิร์ฟเวอร์ tcp / ip ของตัวเอง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.