2009-12-16 54 views
-2

我想解壓壓縮文件,比如files.zip,到一個與我的工作目錄不同的目錄。 說,我的工作目錄是/home/user/address,我想解壓縮文件/home/user/name使用Perl重定向解壓輸出到特定的目錄

我想如下

#!/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

+2

如果你想改變你的工作目錄,看看chdir函數http://perldoc.perl.org/functions/chdir.html – Nifle 2009-12-16 19:34:53

+1

這個問題根本不是Perl相關的。事實上,這根本不是一個編程問題。這是一個關於'unzip'的命令行選項的問題,你可以在命令行上輸入unzip並按輸入。 – 2009-12-16 20:38:48

+0

@Sinan:這是Perl相關的,因爲我也想知道Perl中的哪個命令改變了這個目錄。正如mobrule所說,它是chdir。如果不是他,我不會知道這件事。 – shubster 2009-12-18 12:42:11

回答

8
unzip $files -d $newdir 
+0

我在哪裏可以閱讀文檔'd'? – shubster 2009-12-16 19:30:31

+4

man unzip ........... – 2009-12-16 19:31:29

+0

你不需要'man'。只需在命令行鍵入'unzip'並按下'Enter'。 – 2009-12-16 20:39:19

3

使用Perl命令

chdir $newdir; 

,而不是反引號

`cd $newdir` 

這將引起新的外殼,將目錄更改在殼,然後退出。

0

您也可以使用Archive :: Zip模塊。在extractToFileNamed具體看:。

「extractToFileNamed($文件名)

提取我與給定名稱的文件,該文件將使用默認模式下創建的目錄將創建爲需要$ filename參數「

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