我正在终端中运行一个命令,该命令将通过目录检查媒体文件,然后从这些文件中提取隐藏式字幕数据。不幸的是,即使不存在隐藏字幕数据,该程序仍会处理整个文件,这可能需要很长时间。我想做的是在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
假设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
退出,然后再启动另一个。如果要并行运行,请删除此行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句