วิธีแยกโฟลเดอร์ออกจาก rsync


60

ฉันพยายามสำรองข้อมูลโฟลเดอร์บ้านในไดรฟ์ NAS ของฉัน ฉันให้สิ่งนี้:

rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ admin@192.168.1.65:LinuxHome

rsync-exclude.txtมีเนื้อหานี้อยู่ที่ไหน:

/home/chris/Downloads/*
/home/chris/Downloads/
/home/chris/Downloads/*.*

และอยู่ในโฟลเดอร์เดียวกับที่ฉันเรียกใช้ rsync (โฮมโฟลเดอร์)

อย่างไรก็ตาม rsync พยายามที่จะคัดลอกโฟลเดอร์นี้เช่นกัน

ผมทำอะไรผิดหรือเปล่า?

คำตอบ:


88

คุณกำลังให้เส้นทางที่แน่นอนในรายการยกเว้นของคุณ

ด้วย rsync เส้นทางทั้งหมดยกเว้น (หรือรวม!) ที่ขึ้นต้นด้วย/จะถูกยึดกับ " การถ่ายโอน "

/home/chrisรากของการถ่ายโอนในกรณีนี้คือ ถ้าคุณทำ:

rsync -Paz --exclude-from 'rsync-exclude.txt' / admin@192.168.1.65:

... ดังนั้นการยกเว้นของคุณควรใช้งานได้ (แต่คุณต้องการคัดลอกทุกอย่างในระบบไฟล์นั้น!)

แต่เนื่องจากคุณเพียงแค่พยายามที่จะซิงค์บ้านไดเรกทอรีและมีไดเรกทอรีย่อยของไม่มี/home/chrisชื่อ"home/chris/Downloads", rsyncพบว่าไม่มีอะไรที่ตรงกับ

ดังนั้นให้ลองลบ/home/chrisส่วนต่าง ๆ ออกจากrsync-exclude.txtไฟล์ของคุณ

ที่จริงแล้วคุณควรจะต้องมีบรรทัดเดียวในไฟล์:

/Downloads

โปรดทราบว่าหากคุณไม่ได้ระบุผู้นำรายการ/และคุณมีชื่อไดเรกทอรีอื่นอยู่ไดเรกทอรี"Downloads"เหล่านั้นจะถูกยกเว้นด้วย ฉันสมมติว่าคุณต้องการยกเว้น "ระดับบนสุดของคุณ" (เทียบกับไดเรกทอรีต้นทางอาคา "รากของการถ่ายโอน") ไดเรกทอรีดังนั้นคุณจะต้องการชั้นนำDownloads/

วิธีที่ง่ายที่สุด (เพื่อยกเว้นเส้นทางเพียงไม่กี่เส้นทาง)

หากคุณต้องการยกเว้นเพียงไดเรกทอรีเดียวให้ทำเช่นนี้ (หลีกเลี่ยงไฟล์แยก):

rsync -Paz --exclude /Downloads /home/chris/ admin@192.168.1.65:LinuxHome

คุณสามารถเชื่อมโยง--excludeแท็กด้วยกันได้เช่น:

rsync -Paz --exclude /Downloads --exclude '/Something Else' --exclude .hiddenFile /home/chris/ admin@192.168.1.65:LinuxHome

โปรดทราบว่าเนื่องจากไม่มีเครื่องหมายสแลชจึงจะแยก.hiddenFileออกจากทุกไดเรกทอรีที่คัดลอก!

แต่ถ้าคุณมีข้อยกเว้นมากกว่าสองสามข้อคุณจะดีกว่าด้วย--exclude-fromและมีไฟล์

บันทึก

ผมเห็นว่าคุณได้รับมันขวา แต่ผู้ที่ใหม่กับ rsync ควรทราบเฉือนที่สิ้นสุดของ/home/chris/

ในการอ้างถึงrsyncหน้าคน "คุณสามารถนึกถึงการลาก / บนแหล่งที่มาเป็นความหมาย 'คัดลอกเนื้อหาของไดเรกทอรีนี้' ซึ่งตรงข้ามกับ 'คัดลอกไดเรกทอรีตามชื่อ'."

ดังนั้นหากคุณทิ้งเครื่องหมายทับต่อท้ายคุณจะต้องจบลงด้วยไดเรกทอรีที่เรียกว่าchrisภายในไดเรกทอรีเป้าหมายที่มีทุกอย่างจาก/home/chris(ยกเว้นDownloadsไดเรกทอรีดั้งเดิมแน่นอน!)


2

สิ่งนี้อาจจะง่ายต่อการมองเห็นและเป็นเพียงข้อสังเกตเกี่ยวกับการยกเว้นไดเรกทอรีและไวยากรณ์:

SRC='/home/username'
DST='/run/media/username/EasyStoreRT/rsync'

rsync -avrh --stats                                 \
    --log-file=/home/username/log/rsync-home.log    \
    --exclude='/username/.cache'                    \
    --exclude='/username/.local/share/Trash'        \
    $SRC \
    $DST \

มันจะแยกไดเรกทอรีเหล่านั้นและไฟล์ทั้งหมดที่อยู่ในพวกเขา ไม่ว่าด้วยเหตุผลใดก็ตาม rysnc ไม่ได้ต่อท้าย / home / ชื่อผู้ใช้กับ /.cache มีเพียงบ้าน / ที่จะยึดเหนี่ยวตัวเองดังนั้นฉันจึงต้องเพิ่ม / ชื่อผู้ใช้ในแต่ละไดเรกทอรีที่ยกเว้น

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

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