- 论坛徽章:
- 0
|
本帖最后由 tbb2008 于 2013-05-05 20:38 编辑
看到一个这样的perl脚本,大概记得用到了IPC: pen2, read等模块,函数。其目的是把一列压缩文件(.tar.gz),自动解压。里面有一个hash结构,key是所有的压缩文件名,value是他们对于的文件大小,好像还有一个校验码。脚本的最后是很大的二进制文件,我猜测就是那些的压缩文件。
我是新手,看到这样的一个perl脚本就可以解压一些列压缩文件,的确很方便,但又不知道是如何把这些压缩文件和最前面的自动解压脚本生成为一个脚本文件的,哪位专家能帮忙解析(解释)一下? 先谢了。
部分code 如下:- $product = "pa";
- $version = "";
- %toc = (
- "dwre_bin_dwh_install_1.19a.tgz" => [ 3631464856, 4878 ],
- "dwre_bin_dwh_update_4.04a.tgz" => [ 1894093091, 16142 ],
- "dwre_bin_dwwrap_1.07a.tgz" => [ 3005528922, 2112 ],
- "dwre_bin_error_1.00a.tgz" => [ 1175915063, 6121 ],
- "dwre_bin_httpcom_1.01a.tgz" => [ 1826575581, 1519 ],
- "dwre_bin_versionsorter_1.09a.tgz" => [ 2203230229, 9966 ],
- "dwre_bin_vetoc_1.01a.tgz" => [ 1226604463, 3357 ],
- "dwre_snpsperl_2.02a.tgz" => [ 473952241, 9770468 ],
- "vip_common_6.35a.tgz" => [ 207897596, 4382484 ],
- "vip_pa_1.04a.tgz" => [ 1015181103, 138288175 ],
- );
- use Cwd;
- use IPC::Open2;
- 。。。。。。。。。。。。。
- foreach $file ( sort keys %toc ) {
- read( DATA, $buffer, $toc{$file}[1] );
- $pid = open2( *CKSUMRD, *CKSUMWR, "$cksum" );
- print CKSUMWR $buffer;
- close CKSUMWR;
- chomp( $checksum = <CKSUMRD> );
- close CKSUMRD;
- waitpid( $pid, 0 );
- $checksum =~ s/\s+.*$//;
- if ( $checksum != $toc{$file}[0] ) {
- print "ERROR: File $file failed checksum validation\n";
- exit( 1 );
- }
- if ( $file =~ /.tgz$/ ) {
- print " Unpacking: $file ...\n";
- open UNTAR, "| $tar zxf -";
- print UNTAR $buffer;
- close UNTAR;
- if ( $? ) {
- print "\nERROR: Unable to unpack file $file. Please check available diskspace\n";
- exit( 1 );
- }
- }
- elsif ( $file =~ /.readme$/ ) {
- $readme = $buffer;
- }
- else {
- print "ERROR: Found unsupported file type\n";
- }
- $buffer = "";
- }
复制代码 |
|