Saya mendapatkan diff: memory exhausted
kesalahan ketika mencoba untuk diff dua file 27 GB yang sebagian besar mirip pada kotak Linux dengan CentOS 5 dan 4 GB RAM. Ini adalah masalah yang diketahui, tampaknya.
Saya berharap akan ada alternatif untuk utilitas penting seperti itu, tetapi saya tidak dapat menemukannya. Saya membayangkan solusinya harus menggunakan file sementara daripada memori untuk menyimpan informasi yang dibutuhkan.
- Saya mencoba menggunakan
rdiff
danxdelta
, tetapi mereka lebih baik untuk menunjukkan perubahan antara dua file, seperti tambalan, dan tidak berguna untuk memeriksa perbedaan antara dua file. - Sudah mencoba VBinDiff , tetapi ini adalah alat visual yang lebih baik untuk membandingkan file biner. Saya butuh sesuatu yang bisa menyalurkan perbedaan ke STDOUT seperti biasa
diff
. - Ada banyak utilitas lain seperti
vimdiff
itu hanya berfungsi dengan file yang lebih kecil. - Saya juga membaca tentang Solaris
bdiff
tetapi saya tidak dapat menemukan port untuk Linux.
Adakah ide selain memecah file menjadi potongan-potongan kecil? Saya memiliki 40 file-file ini sehingga mencoba untuk menghindari pekerjaan memecahnya.
Jawaban:
cmp
melakukan hal-hal byte-by-byte, jadi mungkin tidak akan kehabisan memori (hanya mengujinya pada dua file 7 GB) - tetapi Anda mungkin mencari lebih detail daripada daftar "file X dan Y berbeda pada byte x , baris y ". Jika kesamaan file Anda diimbangi (misalnya, file Y memiliki blok teks yang identik, tetapi tidak di lokasi yang sama), Anda dapat meneruskan offset kecmp
; Anda mungkin dapat mengubahnya menjadi sinkronisasi ulang dengan skrip kecil.Selain itu: Jika ada orang yang mendarat di sini ketika mencari cara untuk mengonfirmasi bahwa dua struktur direktori (berisi file yang sangat besar) identik:
diff --recursive --brief
(ataudiff -r -q
untuk jangka pendek, atau bahkan mungkindiff -rq
) akan berfungsi dan tidak kehabisan memori.sumber
Saya menemukan tautan ini
Saya tidak yakin apakah Anda mencoba kedua opsi itu atau apakah keduanya cocok untuk Anda. Semoga berhasil.
sumber
diff -H
adalah alias tidak berdokumen dan usang untukdiff --speed-large-files
.Jika file identik (panjang yang sama) kecuali untuk beberapa nilai byte, Anda dapat menggunakan skrip seperti berikut (
w
adalah jumlah byte per baris ke hexdump, sesuaikan dengan lebar tampilan Anda):Ini tidak terlalu cepat, tetapi melakukan pekerjaan.
sumber