Apakah ada bdiff (1) di Linux?

9

Ada bdiff(1)perintah di Solaris, yang memungkinkan Anda untuk diff(1)file dengan ukuran lebih besar dari ukuran RAM Anda ( http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html ).

Apakah ada yang seperti itu di Linux? Saya mencoba googling tetapi saya tidak menemukan paket yang ada bdiffdi Ubuntu.

AntonioK
sumber

Jawaban:

13

bdiff tampaknya tersedia di Linux (setidaknya sebagai bagian dari Heirloom Toolchest ).

beda

Saya mungkin hanya akan menggunakan diff lama biasa dengan switch ini:

diff --speed-large-files bigfileA bigfileB

Kenapa itu tidak berhasil?

Lihat komentar oleh @EvanTeitelman, --speed-large-filestidak memengaruhi cara file dimuat ke dalam memori.

Dapat ditunjukkan / dikonfirmasi untuk tidak bekerja menggunakan perintah berikut:

fallocate -l 10G testa; fallocate -l 10G testb && \
        diff --speed-large-files -a testa testb

bsdiff

Sulit untuk mengkonfirmasi ini, tetapi saya menemukan alat yang disebut bsdiffberasal bdiff. Saya telah mengkonfirmasi bahwa alat ini ada di Ubuntu, cukup apt-get install bsdiff.

Mengapa ini bisa berhasil?

Sekali lagi terima kasih @EvanTeitelman di komentar, di bsdiffatas adalah alat diff untuk file biner. bsdiffadalah alat diff biner dan dapat menangani file besar. Tidak jelas seberapa besar. Lihat tautan berikut ke utas yang membahas penggunaannya.

riff

Saya pikir Anda juga bisa menggunakan rdiff untuk melakukan ini juga. Rdiff dapat menangani file yang sangat besar.

  1. Buat tanda tangan dari satu file:

    rdiff signature A sigs.txt
    
  2. Gunakan sigs.txt file tanda tangan yang dihasilkan dan file besar B lainnya untuk membuat delta:

    rdiff delta sigs.txt B deltaAB.txt
    
  3. Delta berisi semua info yang Anda perlukan untuk membuat kembali file B ketika Anda baru saja A dan file delta deltaAB.txt.

    Untuk membuat ulang B, jalankan:

    rdiff patch A deltaAB.txt B
    

Mengapa ini berhasil?

Saya menemukan posting blog ini berjudul: Perbedaan yang Lebih Baik Atau Apa yang Harus Dilakukan Ketika perbedaan GNU Kehabisan Memori ("diff: memory habis") , yang melaporkan bahwa file 4,5GB hanya mengkonsumsi ~ 66MB RAM.

lfhex

lfhex adalah aplikasi untuk melihat dan mengedit file dalam teks hex, oktal, biner, atau ascii. Kekuatan utama lfhex adalah kemampuannya untuk bekerja dengan file yang jauh lebih besar daripada memori sistem. Namun itu adalah alat GUI.

tangkapan layar

                  ss of lfhex]! [ss dari lfhex

Referensi

slm
sumber
Meskipun ini tidak selalu didokumentasikan, GNU diff memungkinkan Anda untuk menggunakan -Hsinonim untuk --speed-large-files.
2
bsdiffadalah alat diff biner, bukan alat diff file-besar.
3
Sayangnya, sepertinya --speed-large-filesflag tidak memengaruhi cara GNU memuat banyak file ke dalam memori. Coba jalankan fallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testbuntuk mengonfirmasi ini. (Atau lihat kode sumbernya.)
2
Saya berhasil membangun bdiffdari Heirloom Toolchest setelah diganti /sbin/sholeh /bin/shdi makefiles. Sekarang ketika saya mencoba untuk menjalankannya, saya mengerti bdiff: Can not execute '/usr/5bin/diff'. Maaf, saya tidak ingin memasang apa pun untuk /usr/5bin/. Ini bukan solusi yang layak. Pilihan lain yang disebutkan di sini tidak berfungsi untuk saya karena saya ingin melihat perbedaan sebagai teks.
Christian Pietsch
1
PS: Anehnya, lfhex -c file1 file2bekerja dengan baik untuk saya setelah mengatur View -> Editing base -> ASCII untuk kedua panel.
Christian Pietsch