2009-02-05 25 views
7

Tôi muốn lưu trữ một thư mục (Tôi không biết liệu tôi có thể gọi "Tôi muốn tar thư mục") hay không. Tôi muốn bảo vệ quyền truy cập ở đầu kia khi tôi un-tar nó. Tôi nên giải quyết vấn đề này trong perl.Làm cách nào để lưu trữ thư mục trong Perl như tar trong UNIX?

Cảm ơn bạn đã trả lời nhưng tại sao tôi yêu cầu làm điều đó Perl là tôi muốn nó độc lập với nền tảng. Tôi muốn chuyển một tập tin lớn sang nhiều máy. Những máy này có thể là nền tảng bất kỳ. Tôi sẽ có thể để untar tar tập tin này đúng cách? Vì vậy, tôi muốn viết các chương trình tar và untar của riêng tôi. Tại sao tôi sử dụng Perl là làm cho nền tảng độc lập. Vì vậy, tôi không thể sử dụng lệnh tar bằng cách mở vỏ trong kịch bản và các công cụ như thế. Mô-đun Archive::Tar chỉ giao dịch với tệp tarred nhưng không có tùy chọn lưu trữ tệp.

+0

Có gì sai với tar? Xin vui lòng bao gồm các lý do tại sao bạn không thể hoặc sẽ không sử dụng tar cho việc này. –

+0

Có, "để tar một thư mục" là một cụm từ phổ biến. – zoul

+0

Tôi không gặp vấn đề với Archive :: Tar. Bạn có thể tạo lưu trữ như thế này: Lưu trữ :: Tar-> create_archive ('out.tgz', COMPRESSION_GZIP, @filelist); Điều gì về zip? Đó là trên linux, windows và mac. –

Trả lời

9

Dưới đây là một ví dụ đơn giản:

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

Bạn có thể muốn xem Archive::Tar trên CPAN. (Tôi chỉ đoán, tôi chưa bao giờ sử dụng nó bản thân mình.) Tại sao bạn nhấn mạnh vào làm nó trong Perl?

+0

Tôi muốn nó là nền tảng độc lập ... – Ram

+0

Lưu trữ tar có sẵn với ActivePerl. –

3

Bạn có thể sử dụng mô-đun Lưu trữ :: Tar Perl hoặc bạn có thể thực hiện tar trực tiếp.

Nếu bạn chạy với tùy chọn sử dụng tar từ dòng lệnh, hãy sử dụng cờ -p để giữ quyền.

Nếu bạn đang theo đúng nghĩa là chỉ cần tìm kiếm để tar lên thư mục, tôi chỉ cần chạy lệnh trực tiếp, bạn không cần phải sử dụng Perl. Nếu bạn cần phải làm một số xử lý ưa thích sau đó, có lẽ bạn nên. Nó phụ thuộc.

2

Nghe có vẻ với tôi như rsync có thể là một giải pháp tốt hơn cho điều này, nhưng bạn chưa biết nhiều về những gì ràng buộc khác mà bạn có.

4

Hai thông số; tên tệp nén tar và tên thư mục bạn muốn trong tệp tar. ví dụ

 
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); 
Các vấn đề liên quan