คำตอบที่ยอมรับได้
เกี่ยวกับrdiffโพสต์librsync 2.0.1
เป็นสิ่งที่ดีอ่านสำหรับการชี้แจงการทำงานของคำสั่งดังนั้นฉันได้อ้างอิงที่ด้านล่างเพื่อรักษาเนื้อหาในคำตอบนี้ถ้าไม่มีอะไรอื่น
มันเป็นสิ่งสำคัญเพื่อให้ได้รับความเข้าใจที่ดีของ rdiff สามขั้นตอนเพื่ออัปเดตไฟล์: ลายเซ็น , เดลต้าและแพทช์เป็นพูดคุยเกี่ยวกับในrdiffหน้าคน ฉันได้พบrdiff
สคริปต์ตัวอย่างคำสั่งบน GitHub ที่เป็นประโยชน์ซึ่งฉันจะอ้างอิงและพูด
เป็นหลัก ...
- ด้วย "เริ่มต้น" หรือไฟล์ฐาน [
file1
] และคุณสร้างไฟล์ลายเซ็นจากมัน
- ซึ่งมักจะเล็กกว่าไฟล์ฐาน / ต้นฉบับมาก
- ด้วยไฟล์ลายเซ็นคุณเปรียบเทียบกับไฟล์อื่น [
file2
] คล้ายกับไฟล์ฐานของคุณ แต่แตกต่างกัน ( เช่นอัปเดตล่าสุด ) และสร้างไฟล์เดลต้าที่มีเพียงความแตกต่างระหว่างสองไฟล์
- ใช้ "ความแตกต่างเท่านั้น" หรือไฟล์เดลต้าและเปรียบเทียบกับไฟล์ฐาน [
file1
] เพื่อสร้างไฟล์ใหม่ที่มีการเปลี่ยนแปลงจากไฟล์อื่น [ file2
] ที่ตรงกับทั้งสอง
rdiff signature file1 signature-file ## signature base file1
rdiff delta signature-file file2 delta-file ## delta differences file2
rdiff patch file1 delta-file gen-file ## compare delta to file1 to create matching file2
rdiff-example.sh
# $ rdiff --help
# Usage: rdiff [OPTIONS] signature [BASIS [SIGNATURE]]
# [OPTIONS] delta SIGNATURE [NEWFILE [DELTA]]
# [OPTIONS] patch BASIS [DELTA [NEWFILE]]
# Options:
# -v, --verbose Trace internal processing
# -V, --version Show program version
# -?, --help Show this help message
# -s, --statistics Show performance statistics
# Delta-encoding options:
# -b, --block-size=BYTES Signature block size
# -S, --sum-size=BYTES Set signature strength
# --paranoia Verify all rolling checksums
# IO options:
# -I, --input-size=BYTES Input buffer size
# -O, --output-size=BYTES Output buffer size
# create signature for old file
rdiff signature old-file signature-file
# create delta using signature file and new file
rdiff delta signature-file new-file delta-file
# generate new file using old file and delta
rdiff patch old-file delta-file gen-file
# test
diff -s gen-file new-file
# Files gen-file and new-file are identical
rdiff เป็นโปรแกรมสำหรับคำนวณและใช้งาน delta เครือข่าย rdiff delta คือเดลต้าระหว่างไฟล์ไบนารีอธิบายว่าไฟล์พื้นฐาน (หรือเก่า) สามารถแก้ไขได้โดยอัตโนมัติเพื่อสร้างไฟล์ผลลัพธ์ (หรือใหม่)
แตกต่างจากโปรแกรม diff ส่วนใหญ่ librsync ไม่ต้องการการเข้าถึงไฟล์ทั้งสองเมื่อมีการคำนวณ diff การคำนวณเดลต้าต้องการเพียงแค่ "ลายเซ็น" สั้น ๆ ของไฟล์เก่าและเนื้อหาทั้งหมดของไฟล์ใหม่ ลายเซ็นต์ประกอบด้วย checksums สำหรับบล็อกของไฟล์เก่า การใช้ checksums เหล่านี้ rdiff ค้นหาบล็อกที่ตรงกันในไฟล์ใหม่แล้วคำนวณเดลต้า
rdiff deltas มักจะมีขนาดเล็กลงและช้ากว่าในการสร้างกว่า xdeltas หรือ diffs ข้อความปกติ หากเป็นไปได้ที่จะมีทั้งไฟล์เก่าและใหม่อยู่ในขณะที่คำนวณเดลต้า xdelta โดยทั่วไปจะสร้างไฟล์ที่เล็กกว่ามาก หากไฟล์ที่ถูกเปรียบเทียบเป็นข้อความล้วนแล้ว GNU diff จะเป็นทางเลือกที่ดีกว่าเนื่องจากมนุษย์สามารถดูได้และนำไปใช้กับการจับคู่แบบไม่แน่นอน
rdiff มาเป็นของตัวเองเมื่อไม่สะดวกที่จะมีไฟล์ทั้งสองอยู่ในเวลาเดียวกัน ตัวอย่างหนึ่งคือไฟล์ทั้งสองอยู่ในเครื่องที่แยกต่างหากและคุณต้องการถ่ายโอนความแตกต่างเท่านั้น อีกตัวอย่างหนึ่งคือเมื่อไฟล์ใดไฟล์หนึ่งถูกย้ายไปที่เก็บถาวรหรือสื่อสำรองข้อมูล
สัญลักษณ์
signature(basis-file) -> sig-file
delta(sig-file, new-file) -> delta-file
patch(basis-file, delta-file) -> recreated-file
ใช้รูปแบบ
แอปพลิเคชันทั่วไปของอัลกอริทึม rsync คือการถ่ายโอนไฟล์ A2 จากเครื่อง A ไปยังเครื่อง B ซึ่งมีไฟล์ A1 ที่คล้ายกัน สามารถทำได้ดังนี้:
- B สร้างลายเซ็น rdiff ของ A1 เรียกสิ่งนี้ว่า S1 B ส่งลายเซ็นไปที่ A. (โดยทั่วไปลายเซ็นจะเล็กกว่าไฟล์ที่อธิบาย)
- คำนวณเดลต้า rdiff ระหว่าง S1 และ A2 เรียกเดลต้านี้ D. A ส่งเดลต้าไปที่ B
- B ใช้เดลต้าเพื่อสร้าง A2 ในกรณีที่ A1 และ A2 มีจำนวนไบต์เท่ากัน rdiff ควรให้การประหยัดพื้นที่อย่างมีนัยสำคัญ
แหล่ง