Конвертация в .tbz или использование других способов поиска разницы

Конвертация в .tbz или использование других способов поиска разницы

У меня есть две папки: Папка A — содержит в общей сложности 1786 файлов dm4. Папка B — содержит в общей сложности 2131 файл tbz (архивный файл dm4, доступный как в папке A, так и в папке B), а также 124 файла dm4, которых нет в папке A.

Цель состоит в том, чтобы собрать все dm4 в одной папке и убедиться, что ни один из dm4 не отсутствует, в котором есть файл tbz в папке B. Однако, когда я копирую все недостающие 124 файла dm4 из папки B в A, это добавляется к 1910 файлам DM4. Однако, моя папка B показывает, что у меня есть 2131 tbz. Это означает, что мне нужно знать имена оставшихся 221 файлов dm4/tbz, которые присутствуют в папке b, чтобы я знал, что они отсутствуют в моем списке dm4.

Каков самый быстрый способ найти файл dm4s/tbz, которого мне не хватает в данном случае?

решение1

Чтобы убедиться, что я правильно понимаю, это правильно?

У вас есть 2131 файл .tbz, и каждому из них должен соответствовать файл .dm4, то есть example-file-09.tbz example-file-09.dm4. Но вам не хватает нескольких соответствующих файлов dm4, и вам нужно найти, какие именно.

Если это правильно, то это должно работать (при условии, что в именах файлов нет пробелов)

dm4_files="$(find A -name '*.dm4')"
for file in $(find B -name '*.tbz'); do 
  # || is a logical or operator; bash will only execute the right side if the left side fails (returns a non-zero exit code)
  echo -e "$dm4_files" | grep -q "$(basename $file .tbz).dm4" || echo "Missing $(basename $file .tbz).dm4"
done

правка: добавление инструкций по запуску из-за плохого форматирования комментариев

Для запуска с терминала:

  1. Измените A и B выше на полные пути к соответствующим каталогам (или перейдите в каталог, содержащий оба)
  2. Вставьте команды

Для запуска из скрипта:

  1. Поместите команды в файл с именем, например, check-dm4.sh, в каталоге с A и B (суффикс .sh ничего не делает, но является общепринятым для скриптов оболочки)
  2. Вставьте следующую строку в начало файла (первая строка) #!/bin/bash
  3. Отметьте файл как исполняемый (chmod +x check-dm4.sh или щелкните правой кнопкой мыши -> Свойства/как это называется в вашем дистрибутиве) 4. Запустите файл

Связанный контент