Jaki jest najłatwiejszy sposób (za pomocą narzędzia graficznego lub wiersza poleceń w systemie Ubuntu Linux), aby dowiedzieć się, czy dwa pliki binarne są takie same, czy nie (z wyjątkiem znaczników czasu)? Nie muszę tak naprawdę wyodrębniać różnicy. Muszę tylko wiedzieć, czy są takie same, czy nie.
186
cmp
konkretnie mówi, że robi porównanie bajt po bajcie, więc jest to moja domyślna wartość dla 2 plików binarnych.diff
jest linia po linii i da ci tę samą odpowiedź Tak / Nie, ale oczywiście nie ten sam zrzut do standardowego strumienia wyjściowego. Jeśli linie są długie, ponieważ być może nie są plikami tekstowymi, wolałbymcmp
.diff
ma tę zaletę, że można określić porównanie katalogów i-r
rekurencję, porównując w ten sposób wiele plików w jednym poleceniu.Odpowiedzi:
Standardowy unix
diff
pokaże, czy pliki są takie same, czy nie:Jeśli nie ma danych wyjściowych polecenia, oznacza to, że pliki nie mają różnic.
źródło
diff: memory exhausted
porównywaniem dwóch plików 13G.diff
mówi wam, że to „binarne” fies. Ponieważ wszystkie pliki można uznać za binarne, jest to dziwne stwierdzenie.diff -s 1.bin 2.bin
lubdiff --report-identical-files 1.bin 2.bin
To pokazujeFiles 1.bin and 2.bin are identical
Użyj
cmp
polecenia. To wyjdzie czysto, jeśli są binarne, lub wydrukuje miejsce wystąpienia pierwszej różnicy i zakończy działanie.źródło
cmp
jest bardziej wydajny niżdiff
. Wolałbym to.cmp $1 $2 && echo "identical" || echo "different"
cmp
ma tryb „cichy”:-s, --quiet, --silent
-suppress all normal output
. Nie testowałem jeszcze, ale myślę, że zatrzyma się na pierwszej różnicy, jeśli taka istnieje.Odkryłem, że Visual Binary Diff był tym, czego szukałem, dostępny na:
Ubuntu:
Arch Linux:
Mac OS X przez MacPorts :
Mac OS X przez Homebrew:
źródło
Użyj sha1, aby wygenerować sumę kontrolną:
źródło
diff
icmp
obaj powiedzą ci, czy różnią się bez żadnego dodatkowego wysiłku.sha1sum
zamiastsha1
?Skończyło się na użyciu hexdump do konwersji plików binarnych do reprezentacji szesnastkowej, a następnie otworzyłem je w meld / kompare / dowolnym innym narzędziu różnicowym. W przeciwieństwie do ciebie, szukałem różnic w plikach.
źródło
hexdump -v -e '/1 "%02x\n"'
jeśli chcesz się różnić i zobaczyć, które bajty zostały wstawione lub usunięte.Możesz użyć funkcji skrótu MD5, aby sprawdzić, czy dwa pliki są takie same, dzięki czemu nie widać różnic na niskim poziomie, ale jest to szybki sposób na porównanie dwóch plików.
Jeśli oba skróty MD5 (dane wyjściowe polecenia) są takie same, oba pliki nie są różne.
źródło
Użyj polecenia cmp. Aby uzyskać więcej informacji, zobacz Pliki binarne i wymuszanie porównań tekstowych .
źródło
-b
nie porównuje plików w „trybie binarnym”. W rzeczywistości „W GNUcmp
możesz także użyć opcji-b
lub--print-bytes
, aby wyświetlić reprezentację ASCII tych bajtów.”. To jest dokładnie to, co znalazłem przy użyciu adresu URL do instrukcji, którą podałeś.cmp
jest z natury moim zdaniem porównaniem binarnym.-b
Opcja drukuje tylko pierwszy bajt, że jest inaczej.Aby znaleźć defekty pamięci flash, musiałem napisać ten skrypt, który pokazuje wszystkie bloki 1K zawierające różnice (nie tylko pierwszy blok jak
cmp -b
)Wynik:
Uwaga: zhakowałem skrypt w 5 minut. Nie obsługuje argumentów wiersza poleceń ani nie obsługuje spacji w nazwach plików
źródło
sh -x
do debugowaniareadlink -f $(which sh)
/bin/dash
. Obecnie tworzy wklej na pastebin.Zróżnicuj za pomocą następujących opcji wykonałby porównanie binarne, aby sprawdzić, czy pliki w ogóle są różne, i wyświetliłby się, jeśli pliki są takie same:
Jeśli porównujesz dwa pliki o tej samej nazwie w różnych katalogach, możesz zamiast tego użyć tego formularza:
OS X El Capitan
źródło
Wypróbuj diff -s
Krótka odpowiedź: uruchom
diff
z-s
przełącznikiem.Długa odpowiedź: czytaj dalej.
Oto przykład. Zacznijmy od utworzenia dwóch plików z losową zawartością binarną:
Teraz zróbmy kopię pierwszego pliku:
Teraz test1.bin i test2.bin powinny być różne:
... oraz test1.bin i copyoftest1.bin powinny być identyczne:
Ale poczekaj! Dlaczego nie ma wyjścia?!?
Odpowiedź brzmi: jest to zgodne z projektem. Brak danych wyjściowych dla identycznych plików.
Ale są różne kody błędów:
Na szczęście nie musisz za każdym razem sprawdzać kodów błędów, ponieważ możesz po prostu użyć przełącznika
-s
(lub--report-identical-files
), aby diff był bardziej szczegółowy:źródło
Spróbuj,
radiff2
który jest częściąradare2
deasemblera. Na przykład za pomocą tego polecenia:Otrzymasz dość sformatowane wyjście dwóch kolumn, w których różnice są podświetlone.
źródło
Moje ulubione używające xxd hex-dumper z pakietu vim:
1) przy użyciu vimdiff (część vim)
2) używając diff
źródło
Jeśli suma md5 jest taka sama, pliki binarne są takie same
Na przykład
źródło
diff
, nad którym nie ma powodu, aby go preferować.Istnieje stosunkowo prosty sposób sprawdzenia, czy dwa pliki binarne są takie same.
Jeśli korzystasz z wejścia / wyjścia pliku w języku programowania; możesz przechowywać każdy bit obu plików binarnych we własnych tablicach.
W tym momencie kontrola jest tak prosta, jak:
źródło