使用Perl将解压缩输出重定向到特定目录

时间:2009-12-16 19:22:17

标签: perl unzip

我想将压缩文件解压缩,files.zip,解压缩到与我的工作目录不同的目录。 比如,我的工作目录是/home/user/address,我想在/home/user/name中解压缩文件。

我正在尝试如下

#!/usr/bin/perl
use strict;
use warnings;

my $files= "/home/user/name/files.zip"; #location of zip file
my $wd = "/home/user/address" #working directory
my $newdir= "/home/user/name"; #directory where files need to be extracted
my $dir = `cd $newdir`;
my @result = `unzip $files`; 

但是当从我的工作目录运行上述内容时,所有文件都会在工作目录中解压缩。如何将未压缩的文件重定向到$newdir

4 个答案:

答案 0 :(得分:8)

unzip $files -d $newdir

答案 1 :(得分:3)

使用Perl命令

chdir $newdir;

而不是反引号

`cd $newdir`

只会启动一个新shell,更改该shell中的目录,然后退出。

答案 2 :(得分:1)

虽然对于这个例子,解压缩的-d选项可能是你想要的最简单的方法(如ennuikiller所述),对于其他类型的目录更改,我喜欢File :: chdir模块,它允许当与perl“local”运算符结合使用时,您可以本地化目录更改:

#!/usr/bin/perl
use strict;
use warnings;
use File::chdir;

my $files= "/home/user/name/files.zip"; #location of zip file
my $wd = "/home/user/address" #working directory
my $newdir= "/home/user/name"; #directory where files need to be extracted
# doesn't work, since cd is inside a subshell:   my $dir = `cd $newdir`;
{ 
   local $CWD = $newdir;
   # Within this block, the current working directory is $newdir
   my @result = `unzip $files`;
}
# here the current working directory is back to what it was before

答案 3 :(得分:0)

您还可以使用Archive :: Zip模块。具体看一下extractToFileNamed:

“extractToFileNamed($ fileName)

将我提取到具有给定名称的文件。将使用默认模式创建该文件。将根据需要创建目录。 $ fileName参数应该是文件系统上的有效文件名。成功时返回AZ_OK。 “