-2

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

4 に答える 4

8
unzip $files -d $newdir
于 2009-12-16T19:25:42.523 に答える
1

この例では、解凍する-dオプションがおそらく(ennuikillerで述べられているように)あなたが望むことを行う最も簡単な方法ですが、他のタイプのディレクトリ変更については、ローカライズできるFile::chdirモジュールが好きですperlの「ローカル」演算子と組み合わせると、ディレクトリが変更されます。

#!/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
于 2009-12-16T20:28:24.873 に答える
0

Archive::Zip モジュールを使用することもできます。具体的には、extractToFileNamed を見てください。

"extractToFileNamed( $fileName )

指定された名前のファイルに私を抽出します。ファイルはデフォルト モードで作成されます。ディレクトリは必要に応じて作成されます。$fileName 引数は、ファイル システムで有効なファイル名である必要があります。成功すると AZ_OK を返します。"

于 2009-12-16T19:48:56.343 に答える