我希望你们都做得很好!我试图每隔一段时间轮询一次目录,直到数据完成进入目录,当它完成时我想在linux环境中使用bash脚本在目录上执行我的下一个任务。我无法访问inotify-tools。我测试此过程的方法是在一个shell命令行中键入以下内容:
while true; do touch /home/tmp/fun_temp/nothing.txt; sleep 10; rm -rf /home/tmp/fun_temp/nothing.txt; done
这会在名为nothing.txt的临时目录中创建一个文件,然后睡眠10秒然后将其删除,然后再次执行,直到我告诉它停止。我的bash脚本以20秒的间隔监视目录,然后在20秒将目录信息写入名为old_stat.txt的文件中。然后又过了20秒,它将new_stat与旧的stat进行比较,如果它们相等,它应该退出循环并执行命令的下一部分,如果它们不等于继续轮询。这是我的bash脚本:
#!/bin/bash
DIR_TO_CHECK='/home/tmp/fun_temp/'
OLD_STAT_FILE='/home/sleep_files/old_stat.txt'
if [ -e $OLD_STAT_FILE ]; then
OLD_STAT=`cat $OLD_STAT_FILE`
else
OLD_STAT="nothing"
fi
NEW_STAT=`stat -t $DIR_TO_CHECK`
while true; do
if [ "$OLD_STAT" != "$NEW_STAT" ]; then
echo 'Directory is still updating.'
sleep 20
echo $NEW_STAT > $OLD_STAT_FILE
echo 'Checking again.'
elif [ "$OLD_STAT" == "$NEW_STAT" ]; then
echo 'Directory is done updating. Move on.'
exit 0
fi
done
我目前正在使用exit 0作为检查。我通过在命令行中运行上面的while循环测试bash脚本,然后在另一个shell中运行这个bash脚本,然后我给它一分钟以确保目录已更改,然后我在命令中终止while循环line并让bash脚本运行另一分钟,但它永远不会更改为第二个条件并离开循环,除非我杀死脚本并再次运行它。任何帮助都会很棒,谢谢!
答案 0 :(得分:0)
尝试这种脚本变体:
#!/bin/bash
DIR_TO_CHECK='/home/tmp/fun_temp/'
OLD_STAT="initial"
while true; do
NEW_STAT=`stat -t $DIR_TO_CHECK`
if [ "$OLD_STAT" != "$NEW_STAT" ]; then
echo 'Directory is still updating.'
sleep 20
OLD_STAT=$NEW_STAT
echo 'Checking again.'
elif [ "$OLD_STAT" == "$NEW_STAT" ]; then
echo 'Directory is done updating. Move on.'
exit 0
fi
done