运行具有暂停条件的脚本

时间:2014-02-21 17:22:53

标签: linux bash shell sh

也许我想要的甚至不可能,但让我们看看。 我需要运行Linux命令行:

(cd /packages/test/import/lisbon.stuck;ls;cd) | while read f ; do
    mv /packages/test/import/lisbon.stuck/$f /packages/test/import/lisbon/
    sleep 0.2
done

我需要做的是获取运行此命令的脚本,但是当/packages/test/import/lisbon/中的文件数达到1000时暂停脚本,并在文件数减少到100时从脚本返回。 这有可能吗?

3 个答案:

答案 0 :(得分:0)

mv循环中的while命令之后,您可以检查/packages/test/import/lisbon/中的文件数量,如果超过1000,请暂停一段时间,然后再次检查,如果那么它小于100,继续将更多文件移动到此目录中。

答案 1 :(得分:0)

更好的解决方案是让脚本从您要监视的目录中删除文件SIGSTOPSIGSTOP到您的脚本以控制文件流到目录中,但以下内容功能是有效的,如果有点效率低。

block_until_emptier () {
    files=( /packages/test/import/lisbon/* )
    if (( ${#files[@]} > 1000 )); then
        while (( ${#files[@]} >100 )); do
            sleep 0.2
        done
    fi
}

while true ; do
    block_until_emptier /packages/test/import/lisbon
    for f in /packages/test/import/lisbon.stuck/*; do
        mv /packages/test/import/lisbon.stuck/$f /packages/test/import/lisbon/
    done
done

答案 2 :(得分:0)

我确信inotify(7)可以帮到你。您应该考虑incron,这使您可以在目录更改时运行一些脚本!