我在终端内运行一个命令,该命令通过目录检查媒体文件,然后从这些文件中提取隐藏式字幕数据。不幸的是,即使没有隐藏字幕数据,程序仍然会处理整个文件,这可能需要很长时间。我希望能够做的是在60秒后检查输出并查找数据,如果文件为空,则终止该过程并继续下一个文件。
我的旧命令如下
for i in */*.vob
do
/home/me/ccextractor/linux/ccextractor -out=srt -utf8 -trim "$i"
done
我一直在试验sleep
,但我似乎无法让它发挥作用。有什么建议吗?
解
在下面的答案的帮助下(注意评论),我的最终工作代码是:
for i in */*.vob
do
/home/me/ccextractor/linux/ccextractor -out=srt -utf8 -trim "$i" &
pid=$!
sleep 15
srtfile=$(expr "${i}" | sed -r 's/.{4}$//')
fgrep -q "1" "${srtfile}.srt" || kill $pid
wait $pid
done
答案 0 :(得分:3)
您可以在处理一分钟视频后退出CCExtractor,无需终止该过程或单独控制它。
ccextractor -endat 1:00 [etc]
会做你想做的事。
答案 1 :(得分:1)
假设ccextractor
在后台正常工作(不需要输入或tty),请尝试:
for i in */*.vob
do
/home/me/ccextractor/linux/ccextractor -out=srt -utf8 -trim "$i" &
pid=$!
sleep 60
[ -s "${i}_1" ] || kill $pid
wait $pid
done
我还假设ccextractor
创建的输出文件附加了_1
输入文件的名称。
[ -s "${i}_1" ]
测试输出文件是否存在且大小是否大于零。如果这是假的,那么"或"条件运行并且该过程被终止。
wait $pid
会导致shell等待一个ccextractor
退出,然后再启动另一个{{1}}。如果您想并行运行,请删除此行。