여러 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
.