Hinzufügen von Untertiteln für mehrere MKV-Dateien durch MKVmerge über das Terminal

Hinzufügen von Untertiteln für mehrere MKV-Dateien durch MKVmerge über das Terminal

Ich versuche, Untertitel für mehrere MKV-Dateien hinzuzufügen. Dazu verwende ich dieses Skript:

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

Es funktioniert nur für das Stammverzeichnis einwandfrei. Aber es funktioniert nicht für alle Dateien im Unterordner. Bitte helfen Sie mir, es für alle Dateien im Unterordner zum Laufen zu bringen.

Antwort1

Sie könnten etwa Folgendes tun:

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

Antwort2

Wenn Sie verwenden bash,

shopt -s globstar
für Datei in **/*.mkv
Tun
    (Ihre MKVmerge-Befehle usw.)
Erledigt

Durch Festlegen der globstarShell-Option werden alle Verzeichnisse und Unterverzeichnisse basherweitert .**/

PS Setzen Sie alle Shell-Variablenreferenzen immer in Anführungszeichen (es sei denn, Sie haben einen sehr guten Grund, dies nicht zu tun, und Sie sind sicher, dass Sie wissen, was Sie tun). Sagen Sie insbesondere rm "$file"anstelle von rm $file.

verwandte Informationen