Я пытаюсь добавить субтитры для нескольких файлов 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
.