У меня есть две папки: Папка 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
правка: добавление инструкций по запуску из-за плохого форматирования комментариев
Для запуска с терминала:
- Измените A и B выше на полные пути к соответствующим каталогам (или перейдите в каталог, содержащий оба)
- Вставьте команды
Для запуска из скрипта:
- Поместите команды в файл с именем, например, check-dm4.sh, в каталоге с A и B (суффикс .sh ничего не делает, но является общепринятым для скриптов оболочки)
- Вставьте следующую строку в начало файла (первая строка)
#!/bin/bash
- Отметьте файл как исполняемый (chmod +x check-dm4.sh или щелкните правой кнопкой мыши -> Свойства/как это называется в вашем дистрибутиве) 4. Запустите файл