터미널을 사용하여 MKVmerge로 여러 mkv 파일에 자막 추가

터미널을 사용하여 MKVmerge로 여러 mkv 파일에 자막 추가

여러 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 글로스타
**/*.mkv 파일의 경우
하다
    (MKVmerge 등의 명령)
완료

globstar쉘 옵션을 설정하면 모든 디렉토리와 하위 디렉토리로 bash확장됩니다 .**/

PS 항상 모든 쉘 변수 참조를 인용하십시오(그렇지 않은 타당한 이유가 있거나 자신이 무엇을 하고 있는지 확실히 알고 있지 않는 한). 특히 rm "$file"대신에 이라고 말하세요 rm $file.

관련 정보