不要通过FTP再次发送同一文件

时间:2014-12-31 10:31:56

标签: python perl shell ftp

我正在使用以下命令作为shell和cron它。

rsync -avh  --ignore-existing  ~/user/data/ root@192.168.0.104:/home/data

现在有新的要求他们正在从/ home / data中删除文件,他们希望我在发送和同步后不发送相同的文件。

这意味着每天都有文件夹 2014-12-23 ,在其中,文件即将到来,当天所有文件都是独一无二的。

somefile_20141223_some.txt 发送给他们,以便他们接受并处理它,我必须在本地控制,所以它不会一遍又一遍地发送相同的文件。

那么我怎么能用这个或普通的FTP实现这个目标。使用任何脚本,如shell,Perl或python

1 个答案:

答案 0 :(得分:0)

当您的cron经常调用脚本(每5分钟?)并且您同步的文件必须保留在本地文件中时,您的脚本必须添加一些已转移文件的住宅。 你是哪种方式:从rsync -log文件中获取grep,或使用find -newer命令。 如果您不想忘记在rsync / ftp期间在本地系统上创建的文件,那么查找有点复杂:

function sendfile {
   echo ftp or rsync $1
}

touch ~/tmp/newsync
if [ -f ~/tmp/lastsync ]; then
   NEWERFLAG="-newer ~/tmp/lastsync"
else
   NEWERFLAG=""
fi

find ~/user/data/ ${NEWERFLAG} ! -newer ~/tmp/newsync | while read file; do
      sendfile ${file}
done
touch -r ~/tmp/newsync ~/tmp/lastsync

注意: 当同步花费大量时间时,cron可能会尝试在第一个同步完成之前启动第二个同步。您应该管理它(触摸一些锁定文件并在完成时删除,但在删除锁定文件之前,在脚本崩溃时考虑解决方案)。 另一种方法是24小时运行过程(处理文件后休息一分钟), 并有一个cron作业,检查进程运行并以其他方式启动它。 当你的过程每天23:59停止时,Ik会很好,所以可以轮换日志文件。