มี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 ฉันได้รับการยืนยันว่าเครื่องมือนี้อยู่ในอูบุนตูเพียงbdiffapt-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 อย่างไรก็ตาม
![เอสเอสของ lfhex]! [เอสเอสของ lfhex](https://i.stack.imgur.com/vOx0a.jpg)
--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 สำหรับบานหน้าต่างทั้งสอง