Shell脚本:如果输出文件为空,则在设置时间后终止程序

时间:2014-03-23 02:20:17

标签: bash shell command-line terminal

我在终端内运行一个命令,该命令通过目录检查媒体文件,然后从这些文件中提取隐藏式字幕数据。不幸的是,即使没有隐藏字幕数据,程序仍然会处理整个文件,这可能需要很长时间。我希望能够做的是在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

2 个答案:

答案 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}}。如果您想并行运行,请删除此行。