免费注册 查看新帖 |

Chinaunix

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

perl解压文件问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-16 14:54 |只看该作者 |正序浏览
如果一个zip文件里面有几个文件,我想解压到当前目录,请问用perl该如何解决.谢谢!

[ 本帖最后由 juming1983 于 2009-12-16 15:09 编辑 ]

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
13 [报告]
发表于 2013-08-30 13:36 |只看该作者
本帖最后由 stanley_tam 于 2013-08-30 13:39 编辑
  1. next if $file !~ m{ \. zip $}mix;
复制代码
就是如果$file不是以.zip结尾的话,就跳过这个$file,直接开始循环的下一个。

正则匹配一般是 $var =~ /pattern/, 但是这样的话,如果出错,报错不好看,所以偶用的是$var =~ m{pattern}.

回复 12# cups_book


   

论坛徽章:
0
12 [报告]
发表于 2013-08-30 13:04 |只看该作者
  1. next if $file !~ m{ \. zip $}mix;
复制代码
这个看不懂,具体用自然语言,解释下?

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
11 [报告]
发表于 2013-08-29 19:43 |只看该作者
  1. my @files = <$dir\\* $dir/.*>;
复制代码
上面这货在文件名有空格的情况下貌似不给力。改成↓这样?{:3_204:}
  1. sub get_zip_files_from {
  2.     use IO::Dir;
  3.     use File::Spec;

  4.     my $dir = shift;
  5.     my @zip_files = ();

  6.     my $d = IO::Dir->new($dir);
  7.     if (defined $d) {
  8.         while (defined(my $file = $d->read)) {
  9.             next if $file eq '.';
  10.             next if $file eq '..';
  11.             next if $file !~ m{ \. zip $}mix;
  12.             $file = File::Spec->catfile($dir,$file);
  13.             push @zip_files, $file;
  14.         }
  15.     }

  16.     return @zip_files;
  17. }
  18. my @files = get_zip_files_from($dir);
复制代码
回复 9# cups_book


   

论坛徽章:
0
10 [报告]
发表于 2013-08-29 15:48 |只看该作者
完整的代码:
  1.         if (scalar(@files) > 0 ) {
  2.                 LogNor(scalar(@files)." files");
  3.                 foreach(@files){
  4.                         LogNor($_);
  5.                         if(-f $_){
  6.                                 ## build an Archive::Extract object ###
  7.                                 $ae = Archive::Extract->new( archive => $_ );
  8.                                 ## extract to /tmp ###
  9.                                 $ok2 = $ae->extract( to => $ExtraPath );
  10.                         }
  11.                 }
  12.         } else {
  13.                 LogNor('No files');
  14.         }
复制代码

论坛徽章:
0
9 [报告]
发表于 2013-08-29 15:44 |只看该作者
本帖最后由 cups_book 于 2013-08-29 15:46 编辑

回复 8# stanley_tam


   
多谢,我正按此方向往下走。
我需要先把文件夹里的所以zip文件都读出来,让后逐个解压。
现在遇到的问题是:

my $dir = 'C:\\Program Files\\get_map_files\\SPAR\\gtw\\maps';
LogNor("mmm - ".$dir);
my @files = <$dir\\* $dir/.*>;

@files读出来的内容就是:
C:\Program
C:\Program

文件夹的路径包含空格,应该怎么办呢

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
8 [报告]
发表于 2013-08-28 15:22 |只看该作者
建议看Archive::Extract的perldoc
  1. #!perl
  2. use strict;
  3. use Archive::Extract;

  4. my $zip_file = 'test.zip';
  5. my $extract_to = '/tmp';

  6. # build an Archive::Extract object
  7. my $ae = Archive::Extract->new( archive => $zip_file );

  8. # extract to current working directory
  9. $ae->extract();

  10. # or extract to directory specified
  11. $ae->extract(to => $extract_to);

  12. __END__
复制代码
回复 7# cups_book


   

论坛徽章:
0
7 [报告]
发表于 2013-08-28 14:55 |只看该作者
如果一个zip文件里面有几个文件,我想解压到当前目录,请问用perl该如何解决。。。
不得其解啊。。。

论坛徽章:
0
6 [报告]
发表于 2009-12-16 16:46 |只看该作者
原帖由 mouse.rice 于 2009-12-16 16:40 发表


仙子大姐 是否常当媒婆?


恩,有这个想法~

论坛徽章:
0
5 [报告]
发表于 2009-12-16 16:40 |只看该作者
原帖由 兰花仙子 于 2009-12-16 15:36 发表
多在cpan上找找啦~
http://search.cpan.org/~adamk/Archive-Zip-1.30/lib/Archive/Zip.pm

如果没有GF你会认真找吧,找module也要像找GF一样滴~


仙子大姐 是否常当媒婆?
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP