我正在讀取一個包含一些歸檔文件的目錄並逐個解壓縮歸檔文件。將tar文件歸檔到Perl中的其他位置
一切似乎都很好,但是文件在具有運行子模塊的主Perl代碼模塊的文件夾中得到解壓縮。
我想要在我指定的文件夾中生成檔案。
這是我的代碼:
sub ExtractFile
{
#Read the folder which was copied in the output path recursively and extract if any file is compressed
my $dirpath = $_[0];
opendir(D, "$dirpath") || die "Can't open dir $dirpath: $!\n";
my @list = readdir(D);
closedir(D);
foreach my $f (@list)
{
print " \$f = $f";
if(-f $dirpath."/$f")
{
#print " File in directory $dirpath \n ";#is \$f = $f\n";
my($file_name, $file_dirname,$filetype)= fileparse($f,qr{\..*});
#print " \nThe file extension is $filetype";
#print " \nThe file name is is $file_name";
# If compressed file then extract the file
if($filetype eq ".tar" or $filetype eq ".tzr.gz")
{
my $arch_file = $dirpath."/$f";
print "\n file to be extracted is $arch_file";
my $tar = Archive::Tar->new($arch_file);
#$tar->extract() or die ("Cannot extract file $arch_file");
#mkdir($dirpath."/$file_name");
$tar->extract_file($arch_file,$dirpath."/$file_name") or die ("Cannot extract file $arch_file");
}
}
if(-d $dirpath."/$f")
{
if($f eq "." or $f eq "..")
{ next; }
print " Directory\n";# is $f";
ExtractFile($dirpath."/$f");
}
}
}
方法ExtractFile被稱爲遞歸循環的所有檔案。 使用$tar->extract()
時,它將在調用此方法的文件夾中解壓縮。
當我使用$tar->extract_file($arch_file,$dirpath."/$file_name")
我得到一個錯誤:
在檔案沒有這樣的文件: '/home/fsang/dante/workspace/output/s.tar' 通過/ home/fsang /但丁/ lib目錄/Extraction.pm line 80
請幫助我檢查了路徑和輸入輸出沒有問題。我不知道$tar->extract_file()
。
非常感謝任何人解決此問題。
問候, Sakshi
不,你是一個錯字。你的「固定」行有奇數的引號。 – cjm 2010-04-12 06:54:47
它仍然給出相同的錯誤信息 – 2010-04-12 06:56:23
謝謝@cjm - 我忘了行尾的報價 - 編輯 – Axarydax 2010-04-12 06:57:20