Występuje diff: memory exhausted
błąd podczas próby różnicowania dwóch plików 27 GB, które są w dużej mierze podobne na komputerze z systemem Linux z CentOS 5 i 4 GB pamięci RAM. Wygląda na to, że jest to znany problem.
Spodziewałbym się, że istnieje alternatywa dla tak niezbędnego narzędzia, ale nie mogę go znaleźć. Wyobrażam sobie, że rozwiązanie musiałoby wykorzystywać pliki tymczasowe zamiast pamięci do przechowywania potrzebnych informacji.
- Próbowałem użyć
rdiff
ixdelta
, ale są one lepsze do pokazywania zmian między dwoma plikami, jak łatka, i nie są tak przydatne do sprawdzania różnic między dwoma plikami. - Próbowałem VBinDiff , ale jest to narzędzie wizualne, które jest lepsze do porównywania plików binarnych. Potrzebuję czegoś, co może przesyłać różnice do STDOUT jak zwykle
diff
. - Istnieje wiele innych narzędzi, takich jak te,
vimdiff
które działają tylko z mniejszymi plikami. - Czytałem również o
bdiff
systemie Solaris, ale nie mogłem znaleźć portu dla systemu Linux.
Jakieś pomysły poza podzieleniem pliku na mniejsze części? Mam 40 takich plików, więc staram się uniknąć pracy nad ich rozpadem.
Odpowiedzi:
cmp
robi bajty po bajcie, więc prawdopodobnie nie zabraknie pamięci (po prostu przetestowałem to na dwóch plikach o pojemności 7 GB) - ale być może szukasz bardziej szczegółowych informacji niż lista „plików X i Y różnią się bajtami x , linia y ”. Jeśli podobieństwa twoich plików są przesunięte (np. Plik Y ma identyczny blok tekstu, ale nie w tej samej lokalizacji), możesz przekazać przesunięcia docmp
; prawdopodobnie możesz to zmienić w porównanie zsynchronizowane za pomocą małego skryptu.Na bok: w przypadku, gdy ktoś inny wyląduje tutaj, szukając sposobu na potwierdzenie, że dwie struktury katalogów (zawierające bardzo duże pliki) są identyczne:
diff --recursive --brief
(lubdiff -r -q
krótko, a może nawetdiff -rq
) będą działać i nie zabraknie pamięci.źródło
Znalazłem ten link
Nie jestem pewien, czy wypróbowałeś te dwie opcje lub czy mogą one działać dla Ciebie. Powodzenia.
źródło
diff -H
jest nieudokumentowanym i przestarzałym aliasemdiff --speed-large-files
.Jeśli pliki są identyczne (tej samej długości), z wyjątkiem kilku wartości bajtów, możesz użyć skryptu podobnego do następującego (
w
liczba bajtów na wiersz do zrzutu heksowego, dostosuj do szerokości wyświetlania):To nie jest bardzo szybkie, ale działa.
źródło