มี bdiff (1) ใน Linux หรือไม่


9

มีbdiff(1)คำสั่งใน Solaris ซึ่งอนุญาตให้คุณdiff(1)ไฟล์ที่มีขนาดใหญ่กว่าขนาด RAM ของคุณ ( http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html )

มีอะไรอย่างนั้นใน Linux? ฉันลองใช้ Google แต่ไม่พบแพ็คเกจที่มีbdiffใน Ubuntu



ซ้ำกันที่เป็นไปได้: unix.stackexchange.com/questions/2150/…
slm

คำตอบ:


13

bdiff ดูเหมือนจะมีอยู่บน Linux (อย่างน้อยก็เป็นส่วนหนึ่งของHeirloom Toolchest )

diff

ฉันอาจจะใช้ 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

ยากที่จะยืนยันเรื่องนี้ แต่ผมพบว่าเครื่องมือที่เรียกว่าซึ่งเกิดขึ้นจากbsdiff ฉันได้รับการยืนยันว่าเครื่องมือนี้อยู่ในอูบุนตูเพียงbdiffapt-get install bsdiff

ทำไมมันอาจทำงาน

ขอบคุณอีกครั้ง @EvanTeitelman ในความคิดเห็นดังกล่าวbsdiffข้างต้นเป็นเครื่องมือ diff สำหรับไฟล์ไบนารี bsdiffเป็นเครื่องมือเลขฐานสองและสามารถจัดการกับไฟล์ขนาดใหญ่ได้ มันไม่ชัดเจนว่าใหญ่แค่ไหน ดูลิงก์ต่อไปนี้ไปยังเธรดที่กล่าวถึงการใช้งาน

rdiff

ฉันคิดว่าคุณสามารถใช้rdiffเพื่อทำสิ่งนี้ได้เช่นกัน Rdiff สามารถจัดการกับไฟล์ที่มีขนาดใหญ่มาก

  1. สร้างลายเซ็นของไฟล์เดียว:

    rdiff signature A sigs.txt
    
  2. ใช้ไฟล์ลายเซ็นที่สร้างขึ้น sigs.txt และไฟล์ขนาดใหญ่อื่น ๆ B เพื่อสร้างเดลต้า:

    rdiff delta sigs.txt B deltaAB.txt
    
  3. เดลต้ามีข้อมูลทั้งหมดที่คุณต้องการสร้างไฟล์ B เมื่อคุณมีไฟล์ A และไฟล์เดลต้า deltaAB.txt

    หากต้องการสร้าง B ใหม่ให้รัน:

    rdiff patch A deltaAB.txt B
    

ทำไมถึงใช้งานได้

ฉันพบโพสต์บล็อกนี้ชื่อ: ความแตกต่างที่ดีขึ้นหรือสิ่งที่ต้องทำเมื่อ GNU diff หมดหน่วยความจำ ("diff: memory exhausted")ซึ่งรายงานว่าไฟล์ rdiff 4.5GB ใช้เพียง 66MB ของแรมเท่านั้น

lfhex

lfhexเป็นแอพพลิเคชั่นสำหรับการดูและแก้ไขไฟล์ในรูปแบบเลขฐานสิบหกฐานแปดฐานสองหรือ ASCII จุดแข็งหลักของ lfhex คือความสามารถในการทำงานกับไฟล์ที่มีขนาดใหญ่กว่าหน่วยความจำระบบ มันเป็นเครื่องมือ GUI อย่างไรก็ตาม

ภาพหน้าจอ

                  เอสเอสของ lfhex]! [เอสเอสของ lfhex

อ้างอิง


แม้ว่าสิ่งนี้จะไม่ได้รับการบันทึกไว้เสมอ แต่ GNU ต่างให้คุณใช้-Hเป็นคำเหมือน--speed-large-filesได้

2
bsdiffเป็นเครื่องมือ diff diff ไม่ใช่เครื่องมือ diff ขนาดใหญ่

3
น่าเสียดายที่ดูเหมือนว่าการ--speed-large-filesตั้งค่าสถานะจะไม่ส่งผลกระทบต่อลักษณะที่ GNU กระจายโหลดไฟล์ลงในหน่วยความจำ ลองเรียกใช้fallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testbเพื่อยืนยันสิ่งนี้ (หรือดูซอร์สโค้ด)

2
ฉันจัดการเพื่อสร้างbdiffจาก Heirloom Toolchest หลังจากแทนที่/sbin/shด้วย/bin/shใน makefiles bdiff: Can not execute '/usr/5bin/diff'ตอนนี้เมื่อฉันพยายามที่จะดำเนินการได้ในสถานที่ที่ฉันได้รับ ขออภัยฉันไม่ต้องการติดตั้งอะไร/usr/5bin/เลย นี่ไม่ใช่วิธีแก้ปัญหาที่ทำงานได้ ตัวเลือกอื่น ๆ ที่กล่าวถึงในที่นี้ไม่ได้ผลสำหรับฉันเพราะฉันต้องการใช้ความแตกต่างของข้อความ
Christian Pietsch

1
PS: น่าแปลกที่ใช้lfhex -c file1 file2งานได้ดีสำหรับฉันหลังจากตั้งค่า View -> Editing base -> ASCII สำหรับบานหน้าต่างทั้งสอง
Christian Pietsch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.