Я нашел сценарий пакетного файла, чтобы выполнить работу, которая мне нужна. Я поставил вопрос о том, как рекурсивно добавлять каталоги и подкаталоги в пакетном процессе, в комментарии к сообщению, из которого я получил этот код, но никто не ответил через 4 месяца. Я не смог найти ответ на этот вопрос в поиске на этом сайте, поэтому я решил начать новую тему по этой теме.
То, что я хотел сделать, это иметь возможность массового изменения метаданных в файлах MKV, что было достигнуто таким образом.
#!/bin/bash
# This script takes all mkv files in the current directory and sets the filename
# (without .mkv) as its title in metadata
for mkvfile in *.mkv; do
mkvpropedit "$mkvfile" -e info -s title="${mkvfile::-4}"
done
Как я могу изменить это для запуска в корневом каталоге, чтобы включить в него все папки и подпапки? Спасибо!
С ударом Вы установили globstar
и nullglob
опции оболочки и использование **
рекурсивно вызывать в подкаталоги:
shopt -s globstar nullglob
for mkvfile in **/*.mkv; do
mkvpropedit "$mkvfile" -e info -s title="${mkvfile::-4}"
done
См. 4.3.2 Встроенное Shopt в руководстве.
Обратите внимание, что можно также использовать ${mkvfile%.mkv}
обрубить расширение.
Можно также использовать, находят, но я думаю, что это становится довольно ужасным
find . -name '*.mkv' -exec sh -c 'mkvpropedit "$1" -e info -s title="$(basename "${1%.mkv}")"' sh {} \;