2012-04-25 6 views
6

Używam polecenia diff do porównywania dwóch plików tekstowych. Muszą być dosłownie dopasowane.Polecenie diff: nie drukuje linii, które są różne, ale nadal mówi, że oba pliki są różne

Więc używam Diff:

diff binary.out binary.expected

(.. Nawiasem mówiąc, te pliki nie są pliki binarne są plik tekstowy nazywam je binarny bo to nazwa projektu)

i dostał

Binary files binary.out and binary.expected differ

Kiedy użyć innego narzędzia diff, najmądrzejszy ze wszystkich (AKA hum an), a między tymi plikami naprawdę nie ma nic.

Czy ktoś może wiedzieć, co się tutaj dzieje?

Dzięki.

+0

'diff' ma wąskie pojęcie" tekstu ". Możesz mieć specjalne znaki, które w rzeczywistości nie są takie specjalne: akcenty, powraca karetka. – geekosaur

+0

Nie sądzę, że moje pliki tekstowe mają specjalne znaki. Zawierają tylko słowo "BINARY SUM", cyfry "0" i "1" oraz kilka znaków nowej linii. Ale nawet to nie wyjaśnia, podczas gdy diff uważał moje pliki binarne za pliki –

+0

Jeśli nie masz sekwencji LF/CR (powrót linii/powrotu karetki) na końcu każdego ciągu pliku, to w większości edytorów tekstu w systemie Windows potraktuje te pliki jako pliki binarne. Symbole te są niewidoczne, gdy patrzysz na tekst w trybie tekstowym, ale spróbuj spojrzeć na pliki w trybie binarnym i powinieneś zobaczyć 0xD 0xA na końcu każdej linii. – Flot2011

Odpowiedz

2

Pamiętaj, aby zignorować białe spacje w opcjach porównania.

Może również wyświetlać znaki Unicode i interpretować je jako binarne. Sprawdź, czy twoje narzędzie różnicowe ma opcję wymuszenia trybu tekstowego.

5

diff z diffutils mówi o następujący tekst/binarny:

diff określa, czy plik jest tekst lub binarny sprawdzając pierwszych kilka bajtów w pliku; dokładna liczba bajtów zależy od systemu, ale zazwyczaj wynosi kilka tysięcy. Jeśli każdy bajt w tej części pliku ma wartość inną niż null, diff uznaje plik za tekstowy ; w przeciwnym razie plik jest binarny.

stąd GNU diff ma dość otwartą definicję tego, co jest tekst, a korzystanie z opcji --text aby zmusić go traktować jak plik tekstowy powinien być rzadko potrzebne.

Czy sprawdziłeś, czy binary.out lub binary.expected zawiera puste znaki? Jaka jest twoja wersja programu?