มีbdiff(1)
คำสั่งใน Solaris ซึ่งอนุญาตให้คุณdiff(1)
ไฟล์ที่มีขนาดใหญ่กว่าขนาด RAM ของคุณ ( http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html )
มีอะไรอย่างนั้นใน Linux? ฉันลองใช้ Google แต่ไม่พบแพ็คเกจที่มีbdiff
ใน Ubuntu
มีbdiff(1)
คำสั่งใน Solaris ซึ่งอนุญาตให้คุณdiff(1)
ไฟล์ที่มีขนาดใหญ่กว่าขนาด RAM ของคุณ ( http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html )
มีอะไรอย่างนั้นใน Linux? ฉันลองใช้ Google แต่ไม่พบแพ็คเกจที่มีbdiff
ใน Ubuntu
คำตอบ:
bdiff ดูเหมือนจะมีอยู่บน Linux (อย่างน้อยก็เป็นส่วนหนึ่งของHeirloom Toolchest )
ฉันอาจจะใช้ diff ทั่วไปปกติกับสวิตช์นี้ แต่:
diff --speed-large-files bigfileA bigfileB
ดูความคิดเห็นโดย @EvanTeitelman --speed-large-files
ไม่ส่งผลกระทบต่อวิธีโหลดไฟล์ลงในหน่วยความจำ
สามารถแสดง / ยืนยันว่าไม่ทำงานโดยใช้คำสั่งต่อไปนี้:
fallocate -l 10G testa; fallocate -l 10G testb && \
diff --speed-large-files -a testa testb
ยากที่จะยืนยันเรื่องนี้ แต่ผมพบว่าเครื่องมือที่เรียกว่าซึ่งเกิดขึ้นจากbsdiff
ฉันได้รับการยืนยันว่าเครื่องมือนี้อยู่ในอูบุนตูเพียงbdiff
apt-get install bsdiff
ขอบคุณอีกครั้ง @EvanTeitelman ในความคิดเห็นดังกล่าวbsdiff
ข้างต้นเป็นเครื่องมือ diff สำหรับไฟล์ไบนารี bsdiff
เป็นเครื่องมือเลขฐานสองและสามารถจัดการกับไฟล์ขนาดใหญ่ได้ มันไม่ชัดเจนว่าใหญ่แค่ไหน ดูลิงก์ต่อไปนี้ไปยังเธรดที่กล่าวถึงการใช้งาน
ฉันคิดว่าคุณสามารถใช้rdiffเพื่อทำสิ่งนี้ได้เช่นกัน Rdiff สามารถจัดการกับไฟล์ที่มีขนาดใหญ่มาก
สร้างลายเซ็นของไฟล์เดียว:
rdiff signature A sigs.txt
ใช้ไฟล์ลายเซ็นที่สร้างขึ้น sigs.txt และไฟล์ขนาดใหญ่อื่น ๆ B เพื่อสร้างเดลต้า:
rdiff delta sigs.txt B deltaAB.txt
เดลต้ามีข้อมูลทั้งหมดที่คุณต้องการสร้างไฟล์ B เมื่อคุณมีไฟล์ A และไฟล์เดลต้า deltaAB.txt
หากต้องการสร้าง B ใหม่ให้รัน:
rdiff patch A deltaAB.txt B
ฉันพบโพสต์บล็อกนี้ชื่อ: ความแตกต่างที่ดีขึ้นหรือสิ่งที่ต้องทำเมื่อ GNU diff หมดหน่วยความจำ ("diff: memory exhausted")ซึ่งรายงานว่าไฟล์ rdiff 4.5GB ใช้เพียง 66MB ของแรมเท่านั้น
lfhexเป็นแอพพลิเคชั่นสำหรับการดูและแก้ไขไฟล์ในรูปแบบเลขฐานสิบหกฐานแปดฐานสองหรือ ASCII จุดแข็งหลักของ lfhex คือความสามารถในการทำงานกับไฟล์ที่มีขนาดใหญ่กว่าหน่วยความจำระบบ มันเป็นเครื่องมือ GUI อย่างไรก็ตาม
--speed-large-files
ตั้งค่าสถานะจะไม่ส่งผลกระทบต่อลักษณะที่ GNU กระจายโหลดไฟล์ลงในหน่วยความจำ ลองเรียกใช้fallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testb
เพื่อยืนยันสิ่งนี้ (หรือดูซอร์สโค้ด)
bdiff
จาก Heirloom Toolchest หลังจากแทนที่/sbin/sh
ด้วย/bin/sh
ใน makefiles bdiff: Can not execute '/usr/5bin/diff'
ตอนนี้เมื่อฉันพยายามที่จะดำเนินการได้ในสถานที่ที่ฉันได้รับ ขออภัยฉันไม่ต้องการติดตั้งอะไร/usr/5bin/
เลย นี่ไม่ใช่วิธีแก้ปัญหาที่ทำงานได้ ตัวเลือกอื่น ๆ ที่กล่าวถึงในที่นี้ไม่ได้ผลสำหรับฉันเพราะฉันต้องการใช้ความแตกต่างของข้อความ
lfhex -c file1 file2
งานได้ดีสำหรับฉันหลังจากตั้งค่า View -> Editing base -> ASCII สำหรับบานหน้าต่างทั้งสอง