Эффективный способ получить разницу между двумя файлами в Linux?

Как упоминалось в этом ответе , вы можете использовать команду, подобную этой, чтобы получить размеры видеофайла:

ffprobe -v error -select_streams v:0 -show_entries stream=width -of default=nw=1:nk=1 input.mp4

И это даст вам результат, подобный

1280

и тогда вы сможете решить, что делать с этим видео

0
01.02.2021, 10:25
1 ответ

Поскольку в вашем вопросе отсутствует важная информация:

  • Что вы понимаете под «всеми вариантами различий»?

  • Какой размер файла вы имеете в виду и сколько строк в нем содержится?

Единственный способ ответить на ваш вопрос — дать много исходной информации.

Существует три основных diffреализации:

  • Оригинальный diff UNIX, основанный на алгоритме Гарольда Стоуна. Обычно это идет вместе с diffhпростым diff для больших файлов и bdiff, внешним интерфейсом к diff, который вызывает diffс сегментированными частями обоих файлов. Это самая старая реализация diff, и переносимая версия этого множества реализаций diff является частью schilytools.

  • Программа udiff от schilytools. Этой программе почти 40 лет.

  • GNU diff реализация, которая составляет прибл. 30 лет.

Разница UNIX

относится к началу 1970-х годов и был написан для крошечных машин с очень ограниченной памятью. Ему по-прежнему требуется выделенная оперативная память, обычно 5 *sizeof (int)*sum _of _строк.

Алгоритм камня ищет наилучшее совпадение повторной синхронизации после вставки или удаления, и это потребляет процессорное время, пропорциональное квадрату суммы строк в файлах. Это ограничивает типичное удобство использования на новейшем оборудовании до нескольких мегабайт на файл, пока операция сравнения не займет слишком много времени.

bdiffявляется фронтентом для diffи автоматически разбивает файлы на куски, запускает diffс кусками и, наконец, объединяет вывод diff. Результирующий вывод различий больше не является оптимальным, если разница охватывает позицию, в которой файлы разделены. bdiffбыл первоначально разработан для SCCSв конце 1970-х годов для ускорения работы.

diffh— это отдельная программа, которая использует процессорное время, равное прибл. пропорциональна размеру файла, но делает крайне нерешительную работу для повторной синхронизации.

удифф

Эта программа была первоначально написана в 1982 году. Она выдает результат, который в большинстве случаев (при вызовеfdiff)идентичен выводу UNIX diff, но повторная синхронизация не всегда работает так же хорошо, как с исходным диф. Он потребляет столько же памяти, сколько и оригинальный UNIX diff, но потребляемое процессорное время только линейно пропорционально размеру файлов.

Разница GNU

Пытается обеспечить то же качество повторной синхронизации, что и исходный diff UNIX, но потребляет больше оперативной памяти, чем сумма размеров обоих файлов. Это превращает GNU diff в свинью памяти, поскольку не позволяет использовать его для больших файлов, даже несмотря на то, что потребление процессорного времени увеличивается только линейно с размером файла, что делает GNU diff лучшим выбором для файлов среднего размера в несколько мегабайт.

Последние версии всех этих программ не имеют ограничений на длину строки.

При типичных размерах файловudiff(и его сестры fdiffиfsdiff)являются самыми быстрыми реализациями различий. Поскольку он не пытается глотать оба файла, (, если они больше 64 МБ,)udiffполезен для больших файлов и кажется лучшим выбором для вашей проблемы.

Я рекомендую вам загрузить последнюю версию schilytools из:

http://sourceforge.net/projects/schilytools/files/

скомпилируйте, установите и запустите:

fdiff file1 file2
1
18.03.2021, 22:35

Теги

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