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 globstar
opción Shell indica bash
que 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
.