使用mkvmerge进行bash循环

时间:2014-03-02 16:51:40

标签: linux bash

我有几个带有相应.srt文件的视频。我正在尝试使用循环合并它们,但我卡住了。这段代码不起作用:

for i in *".avi"
do
    mkvmerge -o "$i.mkv"\
    *$i".avi" \
    *$i".esp.srt"

done

相反,如果我使用这段代码:

for i in *".avi"
do
    mkvmerge -o "$i.mkv"\
    *".avi" \
    *".esp.srt"

done

它合并所有现有文件,将正确的名称添加到创建的新文件中。

但我只想为文件夹中的所有avi文件合并“i.avi”+“i.srt” - >“i.mkv”。

3 个答案:

答案 0 :(得分:4)

您不需要在merge命令中使用glob模式。试试这个:

for i in *.avi
do
    i="${i%.avi}"
    mkvmerge -o "$i.mkv" "$i.avi" "$i.esp.srt"
done

答案 1 :(得分:0)

我正在寻找的解决方案是:

for i in *".avi"
do
    mkvmerge -o "${i%%".avi"}.mkv"\
    "$i" \
    "${i%%".avi"}.esp.srt"

done

当然,它可以改进! 无论如何,多亏了anubhava对echo命令的帮助,这给了我解决它的方法!

答案 2 :(得分:-1)

首先尝试构建循环逻辑,然后添加要完成的任务。

DATADIR="/data/video"
for i in $(ls $DATADIR/*.avi); do
  echo $i
done