我想将压缩文件解压缩,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
?
答案 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。 “