diff сообщает, что два файла отличаются друг от друга, хотя они одинаковы!

У меня есть два файла, которые выглядят идентично мне (включая конечные пробелы и новые строки), но diff все еще говорит, что они отличаются. Даже когда я сравниваю сравнение друг с другом, линии выглядят точно так же. Вывод из diff – это всего 2 файла.

Любая идея, что его вызывает?

4 Solutions collect form web for “diff сообщает, что два файла отличаются друг от друга, хотя они одинаковы!”

Нечетный .. вы можете попробовать cmp ? Вы также можете использовать опцию ' -b '.

cmp man page – Сравнить два байта по байтам.

Это одна из приятных вещей о Unix / Linux .. так много инструментов 🙂

Могут ли различия быть вызваны окончаниями DOS или UNIX, или что-то подобное?

Что делать, если вы их используете? Это может показать различия более явно, например:

 hexdump -C file1 > file1.hex hexdump -C file2 > file2.hex diff file1.hex file2.hex 

Пытаться:

 diff file1 file2 | cat -t 

Параметр -t заставит cat четко показать какие-либо специальные символы – например. ^M для CR, ^I для вкладки.

На странице man (OS X):

  -t Display non-printing characters (see the -v option), and display tab characters as `^I'. -v Display non-printing characters so they are visible. Control characters print as `^X' for control-X; the delete character (octal 0177) prints as `^?'. Non-ASCII characters (with the high bit set) are printed as `M-' (for meta) followed by the character for the low 7 bits. 

Моя первая догадка, которая, как оказалось, подтверждается, заключается в том, что файлы используют разные концы строк. Это может быть какая-то другая разница в пробелах, такая как наличие конечных пробелов (но вы, как правило, не получаете этого на многих строках) или разные отступы (вкладки и пробелы). Используйте команду, которая выводит пробелы и управляет символами в видимой форме, например

 diff <(cat -A file1) <(cat -A file2) diff <(sed -nl file1) <(sed -nl file2) 

Вы можете подтвердить, что различия связаны только с окончанием строк, сначала нормализуя их. У вас может быть утилита dos2unix ; если нет, удалите лишний символ CR (^ M, \ r, \ 015):

 diff <(tr -d '\r' <file1) <(tr -d '\r' <file2) 

или, если file1 – тот, у которого заканчиваются DOS

  tr -d '\r' <file1 | diff - file2 
  • Сравните два каталога, но только часть имени файла
  • Что такое -u diff действительно делает?
  • Рекурсивно сравнить два каталога с diff-r без вывода на неработающие ссылки
  • Diff head файлов
  • diff - выходные номера строк
  • Сравнение журналов без временной отметки
  • Как сделать diff распечатать полный diff файла, если файл не существует?
  • Игнорировать все, кроме текста, при сравнении файлов с diff?
  • Diff: сравнивать только если файл существует, а не содержимое
  • Что означает тире «-» в командной строке Unix?
  • Использование diff для отображения как содержимого новых файлов, так и создания новых пустых файлов
  • Interesting Posts

    Создайте UDP для TCP-моста с помощью socat / netcat для управления командами управления для медиаплеера vlc

    Странное поведение док-станции после открытия максимально развернутого окна

    Извлечь имена файлов со структурой каталога в CSV-файл (отдельный файл csv для каждого имени изображения)

    Невозможно отформатировать CF-карту

    Правила IPTables для маршрутизации трафика VPN через прокси-сервер

    Практическое использование команды «shift» shell builtin?

    Будет ли мой запрос MySQL продолжать работать, даже если мое ssh-соединение падает?

    Есть ли какой-то пароль по умолчанию для нового пользователя в Linux?

    Файл не найден для файла, который существует

    Поиск уникального идентификатора для SD-карт

    Получение черных элементов управления при запуске linux на vmware на окнах

    Может ли SCHED_FIFO быть выгружен SCHED_DEADLINE?

    Многопоточное разделение в системе * nix

    Загрузка ввода из файла в lex

    Найти процесс, который останавливает apache

    Linux и Unix - лучшая ОС в мире.