Adicionando legendas para vários arquivos mkv por MKVmerge usando terminal

Adicionando legendas para vários arquivos mkv por MKVmerge usando terminal

Estou tentando adicionar legendas para vários arquivos mkv. Eu uso este script para fazer isso:

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

Funciona bem apenas para o diretório raiz. Mas não funciona para todos os arquivos da subpasta. Por favor, ajude-me a fazê-lo funcionar para todos os arquivos da subpasta.

Responder1

Você poderia fazer algo assim:

# 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 "$@"' _ %

Responder2

Se você estiver usando bash, faça

shopt-s globstar
para arquivo em **/*.mkv
fazer
    (seus comandos MKVmerge, etc.)
feito

Definir a globstaropção shell informa bashpara expandir **/como todos os diretórios e subdiretórios.

PS Sempre cite todas as referências de variáveis ​​​​do shell (a menos que você tenha um bom motivo para não fazê-lo e tenha certeza de que sabe o que está fazendo). Em particular, diga rm "$file"em vez de rm $file.

informação relacionada