ターミナルを使用してMKVmergeで複数のmkvファイルに字幕を追加する

ターミナルを使用してMKVmergeで複数のmkvファイルに字幕を追加する

複数の 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

関連情報