Добавление субтитров для нескольких mkv-файлов с помощью MKVmerge с использованием терминала

Добавление субтитров для нескольких mkv-файлов с помощью MKVmerge с использованием терминала

Я пытаюсь добавить субтитры для нескольких файлов mkv. Я использую этот скрипт для этого:

for file in *.mkv; do "/Applications/Mkvtoolnix-7.0.0.app/Contents/MacOS/mkvmerge" -o "${file%\.*}(1).mkv"   "(" "$file" ")"  "(" "${file%\.*}.srt" ")" ; rm $file

Это работает нормально только для корневого каталога. Но это не работает для всех файлов в подпапке, пожалуйста, помогите мне сделать так, чтобы это работало для всех файлов в подпапке.

решение1

Вы можете сделать что-то вроде этого:

# make bash function to do conversion and deletion
conv() {
 /Applications/Mkvtoolnix-7.0.0.app/Contents/MacOS/mkvmerge -o "${1%\.*}(1).mkv"   "(" "$1" ")"  "(" "${1%\.*}.srt" ")"
 rm "${1}"
}
# make conv function available to xargs
export -f conv
# recursively convert every .mkv file in current directory
find . -name "*.mkv" -type f -print0 | xargs -0 -n1 -I% bash -c 'conv "$@"' _ %

решение2

Если вы используете bash, сделайте

shopt -s globstar
для файла в **/*.mkv
делать
    (ваши команды MKVmerge и т.п.)
сделанный

Установка globstarпараметра shell указывает bashна необходимость расширения **/на все каталоги и подкаталоги.

P.S. Всегда заключайте в кавычки все ссылки на переменные оболочки (если только у вас нет очень веской причины не делать этого, и вы уверены, что знаете, что делаете). В частности, rm "$file"вместо rm $file.

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