2014-11-01 142 views
0

我是Perl新手,我試圖編寫一個腳本獲取tar文件的路徑,檢查是否有txt文件,如果是提取該文件輸出文件夾。這裏是我的代碼:如何在Perl中提取tar文件到目標目錄

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

use Archive::Tar; 
use File::Spec::Functions qw(catdir); 

#checking if tar file contain a txt file, if yes extract it to a folder 

my $tarPath = 'path/to/tarArchive'; 
my $tar  = Archive::Tar->new($tarPath); 
my @files  = $tar->list_files; 
my $output_dir = 'C:/output/path'; 
foreach my $file (@files) { 
    if ($file =~ /txt$/) { 
     my $extracted_file = catdir($fileName, $file); 
     my $extracted_path = catdir($output_dir, $file); 
     $tar->extract($extracted_file, $output_dir); 
     print $extracted_file; 

    } 
} 
exit 0; 

當我運行此腳本我得到一個錯誤:在檔案沒有這樣的文件。

你能幫我理解我在做什麼錯,什麼應該是正確的命令?

+1

縮小您的問題。你能提取一個你知道有一個文本文件的文件嗎?現在刪除所有的File :: Find代碼。 – toolic 2014-11-01 13:53:25

+0

工具,我已經縮小了我的問題。我仍然得到這個錯誤,並找不到原因。 – user1798339 2014-11-01 19:09:08

+0

你的代碼不能編譯:$ fileName沒有聲明。另外,請用行號顯示您的EXACT錯誤信息。 – toolic 2014-11-01 19:24:48

回答

1

Archive::Tarextract方法不允許您指定輸出目錄;它只允許輸入文件列表。您需要使用extract_file方法:

$tar->extract_file($extracted_file, $output_dir); 
相關問題