2009-02-05 67 views
7

我想存檔一個目錄(我不知道我是否可以調用「我想打個目錄」)。當我解壓縮時,我想在另一端保留訪問權限。我應該在perl中解決這個問題。如何在UNIX中像使用tar一樣在Perl中存檔目錄?

感謝您的迴應,但爲什麼我要求這樣做Perl是我希望它獨立於平臺。我想將一個大文件傳輸到多臺機器。這些機器可以是任何平臺。我應該能夠正確解壓這個tar文件嗎?所以我想寫我自己的焦油和解壓程序。爲什麼我使用Perl是爲了使它與平臺無關。所以我不能通過在腳本中打開shell以及類似的東西來使用tar命令。 Archive::Tar模塊只處理tar文件,但它沒有選項來歸檔文件。

+0

這有什麼錯焦油?請包括你不能或不會使用tar的原因。 – 2009-02-05 11:51:27

+0

是的,「tar目錄」是一個常用的短語。 – zoul 2009-02-05 11:51:53

回答

9

下面是一個簡單的例子:

#!/usr/bin/perl -w 

use strict; 
use warnings 'all'; 
use Archive::Tar; 

# Create a new tar object: 
my $tar = Archive::Tar->new(); 

# Add some files: 
$tar->add_files(</path/to/files/*.html>); 
# */ fix syntax highlighing in stackoverflow.com 

# Finished: 
$tar->write('file.tar'); 

# Now extract: 
my $tar = Archive::Tar->new(); 
$tar->read('file.tar'); 
$tar->extract(); 
7

你可能想看看CPAN上的Archive::Tar。 (我只是猜測,我從來沒有用過它。)爲什麼你堅持用Perl來做?

3

您可以使用Archive :: Tar Perl模塊,也可以直接執行tar。

如果從命令行使用tar選項運行,請使用-p標誌來保留權限。

如果你真的只是在尋找tar目錄,我只是直接運行命令,你不需要使用Perl。如果你之後需要做一些奇特的處理,也許你應該。這取決於。

2

這聽起來好像rsync的可能是這更好的解決辦法,但是你有沒有說太多關於你有什麼其他約束。

4

兩個參數;壓縮tar文件的名稱和tar文件中所需的目錄名稱。 如

 
tarcvf test.tar.gz mydir 
#!/usr/bin/perl -w 

use strict; 
use warnings 'all'; 
use Archive::Tar; 
use File::Find; 


my $archive=$ARGV[0]; 
my $dir=$ARGV[1]; 

if ($#ARGV != 1) { 
    print "usage: tarcvf test.tar.gz directory\n"; 
    exit; 
} 

# Create inventory of files & directories 
my @inventory =(); 
find (sub { push @inventory, $File::Find::name }, $dir); 

# Create a new tar object 
my $tar = Archive::Tar->new(); 

$tar->add_files(@inventory); 

# Write compressed tar file 
$tar->write($archive, 9); 
相關問題