Как включить каталоги и подкаталоги в командный файл

Я нашел сценарий пакетного файла, чтобы выполнить работу, которая мне нужна. Я поставил вопрос о том, как рекурсивно добавлять каталоги и подкаталоги в пакетном процессе, в комментарии к сообщению, из которого я получил этот код, но никто не ответил через 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

Как я могу изменить это для запуска в корневом каталоге, чтобы включить в него все папки и подпапки? Спасибо!

0
задан 11 May 2018 в 08:48

1 ответ

С ударом Вы установили 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 {} \;
2
ответ дан 29 October 2019 в 09:00

Другие вопросы по тегам:

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