在bash'for loop'结束时打印结果

时间:2016-06-04 02:48:19

标签: bash unix for-loop ffmpeg

我是初学者。 我有一个Bash脚本,如果目录中存在字幕,则将字幕嵌入到mkv文件中。

@Component
public class MyBean implements CommandLineRunner {

    public void run(String... args) {
        // Do something...
    }

}

它查找所有具有关联的.srt文件的.mkv文件,并为其执行一些ffmpeg魔术。如果找不到关联的.srt文件,则说明.mkv文件“没有srt文件。”

我怎样才能这样做,以便在for循环结束时打印出所有.skv文件,这些文件确实有.srt文件并成功完成所有其他操作?

谢谢。

1 个答案:

答案 0 :(得分:1)

让我们使用Bash array来存储已完成或已跳过的MKV:

SUCCESSMKVS=()
SKIPMKVS=()

for i in *.mkv; do
    if [ -f "${i%mkv}"*"srt" ]; then
        ffmpeg -i "$i" -f srt -i "${i%mkv}"*"srt" -map 0:0 -map 0:1 \
            -map 1:0 -c:v copy -c:a copy -c:s srt "${i}.output.mkv"
        mv "${i%mkv}"*"srt" "${i%mkv}srt".old
        mv "$i" "${i}.old"
        mv "${i}.output.mkv" "$i"
        SUCCESSMKVS+=("$i")
    else
        echo $i "does not have srt file"
        SKIPMKVS+=("$i")
    fi
done

echo "The following MKVs succeeded:"
for mkv in "${SUCCESSMKVS[@]}"; do
    echo -e "\t${mkv}"
done
echo

echo "The following MKVs were skipped:"
for mkv in "${SKIPMKVS[@]}"; do
    echo -e "\t${mkv}"
done
echo
相关问题