我正在尝试为多个 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
扩展**/
为所有目录和子目录。
PS 始终引用所有 shell 变量引用(除非您有非常充分的理由不这样做,并且您确定自己知道自己在做什么)。特别是,说rm "$file"
而不是rm $file
。