Chinaunix首页 | 论坛 | 博客
  • 博客访问: 55960
  • 博文数量: 8
  • 博客积分: 447
  • 博客等级: 一等列兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-23 10:02
个人简介

不以物喜,不以己悲.

文章分类

全部博文(8)

文章存档

2015年(1)

2013年(2)

2012年(1)

2011年(3)

2010年(1)

我的朋友

分类: LINUX

2010-03-23 10:39:29

公司要求远程备份部分服务器上的数据,服务器端用vsftp,客户端用perl的Net::Ftp模块很容易实现,文件续传用seek函数。
脚本中设置ftp传输模式为二进制模式,使用Net::Ftp模块的size获取服务器端文件的大小。再用seek定位续传点。最后使用appe进行续传。通过shell也很容易实现,因为lftp命令很强大。续传完成不放心可以在脚本中进行MD5码较验。
linux的世界,没有走进来一切都很神秘,走进来一切又都那么有趣,虽然这么多年了,仍然让我流恋往返。

#本地要上传的文件名
    my $file = "${my_id}_$today.sql.tgz";
    return unless -f $file;

#上传到服务器后的文件名
    my $new_file = file_md5_hex($file)."#"."$file";
#打开本地文件
    open FH,$file or return;
#登录到服务器端
     my $object = Net::FTP->new($ftp{host},Port=>$ftp{port},Timeout=>$ftp{timeout})
        or die "Can't connect:$!";
    $object->login( $ftp{user}, $ftp{passwd} ) or die "Can't login:$!";
    $object->binary;
    $object->hash(1);
#得到服务器端文件大小
    my $size=$object->size( basename($new_file) ) || 0;
#在本地文件中移动指针到服务器端文件size的位置
    seek( FH, $size, 0 );
#使用追加模式
    my $fh = $object->appe($new_file) or die $object->message;
    my $data;
#续传
    syswrite( $fh, $data, BUF_SIZE ) while sysread( FH, $data, BUF_SIZE );
    close $fh;
    $object->quit;
    close FH;

阅读(1311) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:TC脚本的注意事项。

给主人留下些什么吧!~~