программа сравнения графического интерфейса с открытым исходным кодом с предустановленным типом файла для Linux

Раньше я использовал Examdiff в Windows, и это здорово, потому что он показывает разницу по типу файла, например, сравнивает JSOON или сортирует файлы INI перед сравнением.

В Linux я нашел вне всякого сравнения, который делает все то же, что и Examdiff, но не так просто, как Examdiff, и это не открытый исходный код. Поэтому мне нужна программа с графическим интерфейсом diff , которая:

  1. Имеет плагины (предустановленные типы файлов, такие как сортировка файлов)
  2. папка сравнивается
  3. желательно с открытым исходным кодом

ОБНОВЛЕНИЕ: Чтобы объяснить, что я имею в виду под плагинами, я приведу два примера .

Сначала я сравню следующие файлы:

  1. 1.json :

    {
      "name": "test app",
      "version": "0.1",
      "release_date": "2_2_2002",
      "kernel": "4.14",
      "username": "root",
      "password": "1234",
    }
    
  2. 2.json

    {"name": "test app","version": "0.1","release_date": "2_2_2002","kernel": "4.14","username": "root","password": "1234",}
    

Вы можете видеть, что эти файлы JSON идентичны по содержанию, за исключением того, что первый имеет правильный отступ (украшен), а второй минимизирован.

Поэтому, если я запущу любой инструмент сравнения этих файлов, я получу много различий.

Бег meld:

работающая комбинация

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

введите описание изображения здесь

Второй пример — файлы INI:

  1. 1.ini

    [info]
    ShortName=EN
    
    [main]
    var1=Yes
    var2=No
    var3=Abort
    var4=Ignore
    var5=OK
    var6=Cancel
    var7=Retry
    var8=All
    var9=Help
    
  2. 2.ini

    [main]
    var1=Yes
    var6=Cancel
    
    
    var5=OK
    
    var9=Help
    
    var2=No
    var3=Abort
    
    var4=Ignore
    var7=Retry
    var8=All
    
    
    
    [info]
    ShortName=EN
    

В файлах INI порядок пар ключ=значение не имеет значения, если они находятся в одних и тех же разделах, и пустые строки также не имеют значения.

поэтому снова запуск meldпоказывает много различий:

введите описание изображения здесь

при запуске Examdiff показывает, что они идентичны (на этот раз он использует другой плагин, который опирается на утилиту под названием INIsorter)

введите описание изображения здесь

Ответы (2)

На самом деле это не ответ, но тем временем некоторые фильтры можно смоделировать с помощью bashзамены процессов и различных утилит:

  1. Для файлов .jsonmlr с помощью и jq:

    meld  <(mlr --json cat 1.json | jq -M '.' ) \
          <(mlr --json cat 2.json | jq -M '.' )
    
  2. Для файлов .inicrudini с помощью :

    meld <(crudini --get --format=lines 1.ini|sort) \
         <(crudini --get --format=lines 2.ini|sort)
    

Одним из недостатков таких методов является то , что meldони не отображают имена файлов ( 1.json и т. д. ), а отображают номера устройств подстановки процессов , из которых нужно вывести соответствующее имя файла.

Я полагаю, что jqодного этого было бы достаточно ( т.е. jq -M 1.json ), но без mlrнего возвращается ошибка «ошибка синтаксического анализа: ожидается другая пара ключ-значение в строке 8, столбце 1 ».

Слияние

Я не знаком с Examdiff и поэтому не понимаю, что вы подразумеваете под «предустановкой типа файла, такой как сортировка файлов», но Meld — отличный инструмент для сравнения файлов и папок.

  1. Не имеет дополнений.
  2. Папка сравнивается
  3. Является открытым исходным кодом

Скриншот объединения

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