也许我想要的甚至是不可能的,但让我们看看。我需要运行一个 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 时从脚本返回。这可能吗?
在 while
循环中的 mv
命令之后,您可以检查 /packages/test/import/lisbon/
中有多少个文件,如果超过 1000 个,请休眠一会儿,然后再次检查,如果小于 100,继续将更多文件移动到此目录中。
更好的解决方案是让从您监视的目录中删除文件的脚本将SIGSTOP
和SIGSTOP
发送到您的脚本以控制文件流入目录,但以下功能是有效的,如果效率有点低。
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
我相信 inotify(7) 可以帮到你。您应该考虑 incron,它使您能够在目录更改时运行一些脚本!