Agregar subtítulos para múltiples archivos mkv mediante MKVmerge usando la terminal

Agregar subtítulos para múltiples archivos mkv mediante MKVmerge usando la terminal

Estoy intentando agregar subtítulos para varios archivos mkv. Utilizo este script para hacer esto:

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

Funciona bien sólo para el directorio raíz. Pero no funciona para todos los archivos de la subcarpeta. Ayúdenme a hacerlo funcionar para todos los archivos de la subcarpeta.

Respuesta1

Podrías hacer algo como esto:

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

Respuesta2

Si estás usando bash, hazlo

shopt -s globstar
para el archivo en **/*.mkv
hacer
    (tus comandos MKVmerge, etc.)
hecho

Configurar la globstaropción Shell indica bashque se expanda **/como todos los directorios y subdirectorios.

PD: Cite siempre todas las referencias a variables de shell (a menos que tenga una muy buena razón para no hacerlo y esté seguro de saber lo que está haciendo). En particular, diga rm "$file"en lugar de rm $file.

información relacionada