gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:00:08 25 4
gpt4 key购买 nike

我是初学者。
如果 mkv 文件存在于目录中,我有一个 Bash 脚本可以将它们嵌入到 mkv 文件中。

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
else
echo $i "does not have srt file"
fi
done

它查找具有关联 .srt 文件的所有 .mkv 文件,并对它执行一些 ffmpeg 魔术。如果它没有找到关联的 .srt 文件,则表示 .mkv 文件“没有 srt 文件”。

我怎样才能做到这一点,以便在 for 循环结束时打印出所有具有 .srt 文件并成功执行所有其他操作的 .mkv 文件?

谢谢你。

最佳答案

让我们使用 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

关于bash - 在 bash 'for loop' 结束时打印结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37625845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com