0

需要 shell 脚本: 1/不断轮询目录“receive_dir”,无论其中是否有文件。2/将文件移动到另一个目录“send_dir”。3/脚本应该只停止轮询文件“stopfile”移动到“receive_dir”。谢谢 !!

我的脚本:

until [ $i = stopfile ]
 do
   for i in `ls receive_dir`; do
     time=$(date +%m-%d-%Y-%H:%M:%S)
     echo $time
     mv receive_dir/$i send_dir/;
   done
done

这在空目录上失败了,还有更好的方法吗?

4

2 回答 2

1

如果您在 Linux 上运行,您可能希望考虑inotifywait

于 2013-07-18T07:13:02.140 回答
0
$ declare -f  tillStopfile
tillStopfile () 
 { 
     cd receive_dir
     [[ -d ../send_dir ]] || mkdir ../send_dir
     while true; do
         date +%m-%d-%Y-%H:%M:%S
         for f in *
         do
             mv "$f" ../send_dir
             [[ $f == "stopfile" ]] && break 2
         done
         sleep 3
     done
 }
$ 

改进

  • while true ... break # 更容易控制这个循环
  • cd receive_dir # 为什么不在“receive_dir”中运行
  • 将日期排除在内部循环之外 # 除非您需要查看每个时间戳?
  • 添加了建议的“睡眠”#选择一个合适的间隔

跑:

$ tillStopfile 2>/dev/null    # suppresses ls error messages
于 2013-07-18T01:38:53.880 回答