RSync - ไม่รวมไดเรกทอรีย่อยที่เฉพาะเจาะจงและลูก ๆ ของมันที่มีไดเรกทอรีย่อยในระดับที่แตกต่างกัน


36

G'day,

ฉันใช้ rsync เพื่อซิงค์ทรีโฟลเดอร์ระยะไกลซ้ำ ๆ ซึ่งมีลักษณะดังนี้:

/folderA/a1/cache
/folderA/a1/cache/A1
/folderA/a1/cache/A2
/folderA/a1/somefolder
/folderA/a1/someotherfolder
/folderA/a2/somefolder/cache
/folderB/cache/
/folderB/b1/somefolder/cache
/folderB/b1/somefolder/yetanotherfolder/cache
/folderB/b1/somefolder/yetanotherfolder/cache/B1
/folderB/b1/somefolder/yetanotherfolder/cache/B2

ฉันไม่รู้ว่าโครงสร้างโฟลเดอร์จะเป็นอย่างไรและมันจะเปลี่ยนไปตามกาลเวลา ดังนั้นสิ่งที่ฉันต้องการจะทำคือ rsync ซ้ำข้างต้น แต่ไม่รวมโฟลเดอร์ "แคช" และโฟลเดอร์ย่อยใด ๆ ที่มีอยู่เพื่อให้ฉันสิ้นสุดการซิงค์:

/folderA/a1
/folderA/a1/somefolder
/folderA/a1/someotherfolder
/folderA/a2/somefolder
/folderB/
/folderB/b1/somefolder
/folderB/b1/somefolder/yetanotherfolder/

ข้อเสนอแนะใด ๆ


คำตอบ:


53

คุณต้องการ--excludeธง ตัวอย่างเช่น rsync ท้องถิ่น:

rsync -a --exclude cache/ src_folder/ target_folder/

จริงๆแล้วมันง่ายมาก - กฎการยกเว้นจะตรงกับไดเรกทอรีชื่อ "แคช" ที่ใดก็ได้ในแผนผังของคุณ

สำหรับข้อมูลเพิ่มเติมให้ค้นหาส่วน "--exclude" และ "ตัวกรองกฎ" ในหน้า rsync ของมนุษย์:

http://www.samba.org/ftp/rsync/rsync.html


1
Doh !! ขอบคุณมันเป็นคำตอบง่ายๆที่ฉันชอบที่สุด :-)
TheEdge

1
แล้วต้นไม้ล่ะ? a/cacheไลค์ยกเว้นเฉพาะ UPDดูคำตอบนี้
x-yuri

2
นอกจากนี้ยัง--exclude /cache/(มีชั้นนำ /) เท่านั้นจะไม่รวมa/cacheไดเรกทอรีไดเรกทอรีใด ๆ cacheไม่ได้ตั้งชื่อ
Amir Ali Akbari

ทำไมa/ b/ในบรรทัดคำสั่งด้านบนมันหมายถึงอะไร?
Danijel

1
@Danijel: a/เป็นไดเรกทอรีที่เราซิงค์ (หรือคัดลอก) จาก; b/เป็นไดเรกทอรีที่เราซิงค์
Jander
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.