Diff идентифицирует html-файлы как двоичные

Если вы можете использовать zsh вместо bash, тогда это намного проще. Zsh может сопоставлять файлы на основе их атрибутов с помощью квалификаторов glob .

files=(/dir/to/check/**/*(Dm$inputNum))

**/*рекурсивный поиск в подкаталогах. Круглые скобки после *содержат квалификаторы glob:Dдля включения точечных файлов и mдля сопоставления файлов на основе времени их модификации в днях, например find -mtime(, вы также можете выбрать другую единицу и установить ограничение по времени, например. (Dmm-$min)действует какfind -mmin -$min).

Zsh предустановлен в macOS. В большинстве других систем unix (, в частности в большинстве дистрибутивов Linux ), он доступен в виде пакета, но не устанавливается по умолчанию.

1
15.10.2019, 19:40
1 ответ

GNU diff рассматривает файлы как двоичные , если в первых нескольких килобайтах есть нулевой байт. Текстовые файлы не содержат нулевых байтов, а двоичные файлы, скорее всего, будут содержать нулевые байты в пределах первых нескольких сотен байтов, так что это хорошая эвристика. Имя файла не имеет значения.

Причина, по которой diff не отображает различий между двоичными файлами, заключается в том, что обычно это нечитаемо. Двоичные форматы обычно не могут быть разделены на строки, которые обеспечивают полезное перевыравнивание после измененного фрагмента, часто радикально меняются до незначительных семантических изменений (, например, вставка одного символа в сжатый файл может изменить все последующее ), и приведет к непечатаемым символам в выводе diff. Но diff может работать с нулевыми байтами. Чтобы заставить diff обрабатывать файлы как текст (, что означает :для отображения различий ), передайте параметр--text(или-a):

diff --text index.html index3.html

Полезно это или нет, зависит от того, почему файл содержит нулевые байты. Нулевые байты необычны в файле HTML. Вы можете получить подсказку с помощью

file index.html

Если файл на самом деле сжат, diff не покажет ничего полезного :вам нужно распаковать его и дать ему имя, отражающее механизм сжатия, например. index.html.gz. Если у вас есть сжатые файлы, в bash/ksh/zsh вы можете распаковать их на лету (заменить uncompressфактической командой, которая читает сжатый файл из его стандартного ввода и записывает распакованный текст в стандартный вывод):

diff --label=index.html <(uncompress <index.html) --label=index3.html <(uncompress <index3.html)

Возможно, ваш файл закодирован в кодировке, отличной от -ASCII -, например UTF -16 , UCS -2 , . ] UTF -32 или многобайтовая кодировка до -Unicode. Такие кодировки редко встречаются в сети.Веб-браузеры поддерживают их, но у инструментов для создания документов могут возникнуть проблемы. Если это так, вы избежите головной боли, если измените свою производственную цепочку, чтобы вместо этого использовать UTF -8 . Тем временем diff --textдаст результаты, которые могут быть или не быть читаемыми в зависимости от того, какое содержимое не -ASCII присутствует, или вы можете преобразовать файлы на лету, чтобы передать их в diff, например, с файлами, закодированными в маленький -порядок байтов UTF -16:

diff --label=index.html <(iconv -f UTF-16LE -t UTF-8 <index.html) --label=index3.html <(iconv -f UTF-16LE -t UTF-8 <index3.html)
2
27.01.2020, 23:40

Теги

Похожие вопросы