免费注册 查看新帖 |

Chinaunix

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

求助:如何用perl做一个自动解压包 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-05 15:42 |只看该作者 |倒序浏览
本帖最后由 tbb2008 于 2013-05-05 20:38 编辑

看到一个这样的perl脚本,大概记得用到了IPC:pen2, read等模块,函数。其目的是把一列压缩文件(.tar.gz),自动解压。里面有一个hash结构,key是所有的压缩文件名,value是他们对于的文件大小,好像还有一个校验码。脚本的最后是很大的二进制文件,我猜测就是那些的压缩文件。

我是新手,看到这样的一个perl脚本就可以解压一些列压缩文件,的确很方便,但又不知道是如何把这些压缩文件和最前面的自动解压脚本生成为一个脚本文件的,哪位专家能帮忙解析(解释)一下? 先谢了。

部分code 如下:
  1. $product = "pa";
  2. $version = "";

  3. %toc = (
  4.          "dwre_bin_dwh_install_1.19a.tgz" => [ 3631464856, 4878 ],
  5.          "dwre_bin_dwh_update_4.04a.tgz" => [ 1894093091, 16142 ],
  6.          "dwre_bin_dwwrap_1.07a.tgz" => [ 3005528922, 2112 ],
  7.          "dwre_bin_error_1.00a.tgz" => [ 1175915063, 6121 ],
  8.          "dwre_bin_httpcom_1.01a.tgz" => [ 1826575581, 1519 ],
  9.          "dwre_bin_versionsorter_1.09a.tgz" => [ 2203230229, 9966 ],
  10.          "dwre_bin_vetoc_1.01a.tgz" => [ 1226604463, 3357 ],
  11.          "dwre_snpsperl_2.02a.tgz" => [ 473952241, 9770468 ],
  12.          "vip_common_6.35a.tgz" => [ 207897596, 4382484 ],
  13.          "vip_pa_1.04a.tgz" => [ 1015181103, 138288175 ],
  14.        );

  15. use Cwd;
  16. use IPC::Open2;
  17. 。。。。。。。。。。。。。

  18. foreach $file ( sort keys %toc ) {

  19.     read( DATA, $buffer, $toc{$file}[1] );

  20.     $pid = open2( *CKSUMRD, *CKSUMWR, "$cksum" );

  21.     print CKSUMWR $buffer;
  22.     close CKSUMWR;

  23.     chomp( $checksum = <CKSUMRD> );
  24.     close CKSUMRD;

  25.     waitpid( $pid, 0 );

  26.     $checksum =~ s/\s+.*$//;

  27.     if ( $checksum != $toc{$file}[0] ) {
  28.         print "ERROR:  File $file failed checksum validation\n";
  29.         exit( 1 );
  30.     }

  31.     if ( $file =~ /.tgz$/ ) {

  32.         print "  Unpacking: $file ...\n";

  33.         open  UNTAR, "| $tar zxf -";
  34.         print UNTAR $buffer;
  35.         close UNTAR;

  36.         if ( $? ) {
  37.             print "\nERROR:  Unable to unpack file $file.  Please check available diskspace\n";
  38.             exit( 1 );
  39.         }

  40.     }
  41.     elsif ( $file =~ /.readme$/ ) {

  42.         $readme = $buffer;

  43.     }
  44.     else {

  45.         print "ERROR:  Found unsupported file type\n";

  46.     }

  47.     $buffer = "";

  48. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP