คัดลอกเนื้อหาไดเรกทอรี rsync แบบวนซ้ำ


8

ฉันพยายามที่จะคัดลอกเนื้อหาของชุดของไดเรกทอรีที่ไม่ซ้ำไปซ้ำอีกระบบระยะไกล

/dirA/dir1/file
/dirA/dir2/file
/dirA/dir3/file

dir1, dir2 และ dir3 มีไดเรกทอรีจำนวนมากที่ฉันไม่ต้องการคัดลอก คัดลอกบนรีโมตโฮสต์ไปยัง / dirB ที่ยังคงโครงสร้างไดเรกทอรีเดียวกัน

ฉันเหนื่อย:

rsync /dirA/*/ host:/dirB/
rsync /dirA/   host:/dirB/

แต่พวกเขาไม่ทำสิ่งที่ฉันต้องการ

คำตอบ:


20

rsync ช่วยให้คุณสามารถระบุรูปแบบที่ก่อให้เกิดการรวมหรือแยกไฟล์และไดเรกทอรี ฉันคิดว่าคุณต้องการใช้สิ่งนี้:

rsync -a -f '- /*/*/' /dirA/ host:/dirB/

คำอธิบาย:

  • -aทริกเกอร์โหมดเก็บที่เปิดใช้งานทั้งการเรียกซ้ำและการเก็บรักษาของ "การเชื่อมโยงสัญลักษณ์อุปกรณ์คุณลักษณะสิทธิ์กรรมสิทธิ์ ฯลฯ" man rsyncตาม
  • -fสั้นสำหรับ--filter=ซึ่งเพิ่มกฎการกรองไฟล์
    • รูปแบบอยู่ในเครื่องหมายคำพูดเดี่ยวเพื่อให้เชลล์ไม่ได้ขยายสัญลักษณ์แทน คำพูดคู่จะทำงานได้ดีเท่าเทียมกันในกรณีนี้
    • - หมายความว่านี่เป็นรูปแบบที่แยกออก
    • ผู้นำ/หมายถึงรูปแบบต้องเริ่มต้นที่dirA/(rsync "transfer-root")
    • */*ส่วนหนึ่งของรูปแบบหมายถึงอะไรภายในของไดเรกทอรีย่อย
    • การติดตาม/จะ จำกัด การยกเว้นไปยังไดเรกทอรี ไฟล์ภายในไดเรกทอรีย่อยของdirA/จะไม่ได้รับผลกระทบ

ดังนั้นในที่สุด rsync ก็อปปี้ไม่มีอะไรมากไปกว่าหนึ่งระดับ (และยังไม่ได้สร้างไดเรกทอรีระดับที่สอง)


2
ดีมาก! ฉันสามารถใช้-f '- /*/'เพื่อ จำกัด ไฟล์ระดับบนสุดเท่านั้น ฉันยังต้องระบุ-f '- .*'เพื่อแยกไฟล์จุดเนื่องจากฉันกำลังซิงค์ไดเรกทอรีบ้าน
haridsv

5

การแก้ปัญหาข้างต้น (โดย PleaseStand) ไม่ได้ผลสำหรับฉันด้วยเหตุผลบางอย่าง สิ่งนี้ใช้ได้ผล:

rsync -avc --no-r ./source/* ./destination/

นอกจากนี้ยังมีตัวเลือกนี้:

rsync -avc --exclude "/" ./source/ ./destination/


1

หนึ่งใน "คุณสมบัติ" ของ rsync คือการแยกไดเรกทอรี

rsync /dirA/ host:/dirB/ และใน rsync /dirA host:/dirB ทางทฤษฎีควรจะเทียบเท่า

ในฐานะที่ไม่ต้องการที่จะส่งเสริมให้ recursiveness คุณต้องการหลีกเลี่ยงการ-r, -aซึ่งนอกเหนือไปจากสิ่งอื่น ๆ -rที่แสดงถึง

ฉันยังไม่ได้ทำการวิจัยมากนัก แต่นี่เป็นคำตอบเริ่มต้นของฉัน

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