免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7736 | 回复: 4
打印 上一主题 下一主题

【求助】linux下本地文件与远端FTP‘下载同步’的脚本实现(不是上传同步!) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-24 23:11 |只看该作者 |倒序浏览
上传同步和下载同步
上传同步就是本地有什么文件发生变化就用PUT 命令同步到FTP上去
下载同步就是FTP上有什么文件发生变化则用GET 命令同步到本地

其实我觉得下载同步的问题是如何用将LFTP获取的远端服务器文件时间,大小等信息传递给SHELL,让脚本判断这些信息。




目的
1.希望当本地硬盘的某些特定目录中生成了新的特定格式的文件,且该文件的大小已经一段时间没有变化,
则上传到某FTP上的某目录。希望同时同步这样几个目录,不是仅同步一个目录。
文件一般是视频格式

2.同样,当另外某FTP上特定目录中生成了新的特定格式的文件,且该文件的大小已经一段时间没有变化,则下载到本地某目录。

FTP1》》》》本地》》》》》FTP2

也就是本地和FTP2都与FTP1同步

但FTP1和FTP2之间可以考虑用FXP也就是

FTP1》》》》本地

FTP1---------本地------------FTP2
》》》》》》》》》》》》》》》

但上面两者会发生冲突因为该FTP可能只允许单线程,FTP1发生变化时,应当先同步本地,再同步FTP2

上传同步的初步解决方案



最近参考了一些网络上的脚本,初步编写了一个简单的从本地文件上传同步的SHELL脚本(本人水平有限见笑了),也就是该同步只使用上传命令,该脚本并不完善,没有探测文件大小稳定的功能,不过这个功能是可以加入的




  1. #timestamp=".timestamp"
  2. tempfile="/tmp/ftpsyncup.$$"


  3. user="username"
  4. server="serverip"
  5. RDB="/TEST/ANIME/"
  6. RD[1]="[Darker than BLACK][黑色契约者]"
  7. RD[2]="POLYPHONICA_神曲奏界"
  8. RD[3]="CLAYMORE_大剑"
  9. LDB="/var/ftp/comic/TV动画/连载中动画/"
  10. LD[1]="[Darker than BLACK][黑色契约者]"
  11. LD[2]="POLYPHONICA_神曲奏界"
  12. LD[3]="Claymore_大剑"
  13. count=0
  14. timeouter=0


  15. trap "/bin/rm -f $tempfile" 0 1 15      # zap tempfile on exit &sigs


  16.       cd "$LDB"                                #change to local home directory
  17. echo "open $server" > $tempfile
  18. echo "user $user password" >> $tempfile
  19. echo "cd $RDB" >> $tempfile

  20. for ((i=1;i<=1;i++));do
  21.    
  22.        lcd ${LD[i]}
  23.    "cd  ${RD[i]}" >>$tempfile

  24.        for filename in  *.rmvb
  25.        do
  26.         if [ -f "$filename" ] ; then
  27.          echo "put -c  \"$filename\"" >> $tempfile
  28.          count=$(( $count + 1 ))
  29.         fi
  30.        done
  31.    

  32. done


  33. echo "quit" >> $tempfile

  34. echo "Synchronizing: Found $count files in local folder to upload."

  35. if  lftp < $tempfile ; then
  36.   echo "Done. All files synchronized up with $server"
  37. fi

  38. exit 0
复制代码



但如果用脚本让远端服务器和本地服务器下载同步却不太好实现,如果只是使用SHELL脚本的化,因为要在远端服务器执行判断,例如大小,时间,单纯使用 SHELL脚本+LFTP不易实现,例如最基本的文件的时间比较,在SHELL脚本中获取远端FTP的文件时间就不行,所以我转而研究 FTP脚本,也就是FTP软件自带的脚本,LFTP好象在这方面没有什么内容,支持的脚本不太强大,而无意中在网络上发现了一个叫 C-kermit /kermit 95的软件,貌似对脚本支持很强大,而且也有前人已经写好的同步脚本,


疑问
这个下载同步脚本真的就没戏了么?

大家还知道有什么命令行下的FTP软件对脚本支持比较好呢
或者有一些 此类的FTP同步专用软件(命令行下)

[ 本帖最后由 vertusd 于 2007-7-8 01:58 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-06-26 11:31 |只看该作者
自己顶上去

论坛徽章:
0
3 [报告]
发表于 2007-07-08 01:41 |只看该作者
再顶

论坛徽章:
0
4 [报告]
发表于 2007-07-10 17:04 |只看该作者
看看这个 http://expect.nist.gov

论坛徽章:
0
5 [报告]
发表于 2008-10-10 16:37 |只看该作者
用 lftp 备份你的文件
对每天都在折腾电脑的xd,重要的数据不能不备份。备份到自己的机器上,万一整个硬盘坏掉,数据还是玩完……最好能备份到另外的主机上,再保险可以在不同的机子上备份多个拷贝,如果你可以在自己的电脑上打开 ftp 服务,可以让 lftp 帮你,在另一台电脑上备份你现有电脑文件~
先来熟悉下 了lftp 的基本用法,如果 ftp 服务器是匿名,只要:
lftp ftpsite
就可以登录进服务器,如果需要用户名和密码,就要像下面的样子:
lftp -u username,password ftpsite
在其他的计算机上登录进如 ftp 服务器后,只需要用 lftp 的 mirror 命令就可以方便的进行下载备份了:
mirror  需要备份的目录  保存备份计算机的本地目录
例如 mirror  /work  save/backup,这样 lftp 就会帮你自动同步目录下的所有文件。你也可以给 mirror 命令传入参数,控制同步的行为:
--delete:  如果远程目录下已经没有某个文件,而本地有,则删除这个文件。
--only-newer:  只下载新的文件。
--exculde:  不包含某个目录。
--verbose:  详细输出。
举例:
mirror --delete --only-newer --verbose  /work backup/
自动备份远处电脑的 work文件夹,到本地当前目录的 backup文件夹下,并且删除已经不存在的文件,并且只下载最新的文件,再给出详细的输出。
你也可以用 lftp 的 -e 选项,把命令直接接在 lftp 之后:
lftp -u username,password -e"mirror --delete --only-newer --verbose  /work backup/" ftpsite
也可以用 at 选项指定备份的时间:
lftp at 00:00 -u username,password -e"mirror --delete --only-newer --verbose  /work backup/"ftpsite
这样每天夜里 12 点就会执行备份任务。
那么,如何恢复备份呢,很简单,只需要在 mirror 命令中加入 --reverse 选项:
mirror --reverse --delete --only-newer --verbose  /work backup/
这样 lftp 就会将备份上传到 ftp 服务器上了

http://bbs.pcbeta.com/thread-219099-1-9.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP