我正在使用以下命令作为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
答案 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会很好,所以可以轮换日志文件。