คำแนะนำในการใช้ ire_and_curses tar c <dir>
มีปัญหาบางประการ:
- tar ประมวลผลรายการไดเร็กทอรีตามลำดับที่เก็บไว้ในระบบไฟล์และไม่มีวิธีใดที่จะเปลี่ยนลำดับนี้ สิ่งนี้สามารถให้ผลลัพธ์ที่แตกต่างไปจากเดิมอย่างสิ้นเชิงหากคุณมีไดเร็กทอรี "เดียวกัน" ในที่ต่างๆและฉันรู้วิธีแก้ไขปัญหานี้ไม่ได้ (tar ไม่สามารถ "เรียงลำดับ" ไฟล์อินพุตตามลำดับที่เจาะจงได้)
- ฉันมักจะสนใจว่าหมายเลข groupid และ ownerid เหมือนกันหรือไม่ไม่จำเป็นว่าการแสดงสตริงของกลุ่ม / เจ้าของจะเหมือนกัน สิ่งนี้สอดคล้องกับสิ่งที่ทำตัวอย่างเช่น
rsync -a --delete
มันซิงโครไนซ์แทบทุกอย่าง (ลบ xattrs และ acls) แต่จะซิงค์เจ้าของและกลุ่มตาม ID ไม่ใช่การแสดงสตริง ดังนั้นหากคุณซิงค์กับระบบอื่นที่ไม่จำเป็นต้องมีผู้ใช้ / กลุ่มเดียวกันคุณควรเพิ่ม--numeric-owner
แฟล็กลงใน tar
- tar จะรวมชื่อไฟล์ของไดเร็กทอรีที่คุณกำลังตรวจสอบตัวเองเป็นเพียงสิ่งที่ควรระวัง
ตราบเท่าที่ไม่มีการแก้ไขสำหรับปัญหาแรก (หรือเว้นแต่คุณแน่ใจว่าไม่มีผลกับคุณ) ฉันจะไม่ใช้วิธีนี้
find
การแก้ปัญหาตามที่เสนอข้างต้นนี้ยังไม่ดีเพราะพวกเขารวมถึงแฟ้มไม่ไดเรกทอรีซึ่งกลายเป็นปัญหาถ้าคุณ Checksumming ควรเก็บไว้ในใจไดเรกทอรีว่าง
สุดท้ายโซลูชันที่แนะนำส่วนใหญ่จะไม่เรียงลำดับอย่างสม่ำเสมอเนื่องจากการเปรียบเทียบอาจแตกต่างกันในระบบต่างๆ
นี่คือวิธีแก้ปัญหาที่ฉันคิดขึ้น:
dir=<mydir>; (find "$dir" -type f -exec md5sum {} +; find "$dir" -type d) | LC_ALL=C sort | md5sum
หมายเหตุเกี่ยวกับโซลูชันนี้:
LC_ALL=C
คือเพื่อให้แน่ใจเพื่อเรียงลำดับความน่าเชื่อถือในระบบ
- สิ่งนี้ไม่ได้แยกความแตกต่างระหว่างไดเร็กทอรี "named \ nwithanewline" และ 2 ไดเร็กทอรี "named" และ "withanewline" แต่โอกาสที่จะเกิดขึ้นดูเหมือนไม่น่าเป็นไปได้มาก หนึ่งมักจะแก้ไขปัญหานี้ด้วย
-print0
แฟล็กfind
แต่เนื่องจากมีสิ่งอื่นเกิดขึ้นที่นี่ฉันจึงเห็นโซลูชันที่จะทำให้คำสั่งซับซ้อนมากขึ้นเท่านั้นจึงคุ้มค่า
PS: หนึ่งในระบบของฉันใช้ busybox แบบ จำกัดfind
ซึ่งไม่รองรับ-exec
หรือ-print0
แฟล็กและยังต่อท้าย '/' เพื่อแสดงถึงไดเร็กทอรีในขณะที่ดูเหมือนว่า findutils ไม่พบดังนั้นสำหรับเครื่องนี้ฉันต้องเรียกใช้:
dir=<mydir>; (find "$dir" -type f | while read f; do md5sum "$f"; done; find "$dir" -type d | sed 's#/$##') | LC_ALL=C sort | md5sum
โชคดีที่ฉันไม่มีไฟล์ / ไดเรกทอรีที่มีบรรทัดใหม่ในชื่อดังนั้นนี่ไม่ใช่ปัญหาในระบบนั้น