2009-03-17 20 views
6

Tôi đang sử dụng mô-đun Archive::Tar của Perl. Vấn đề với nó là nó kéo tất cả mọi thứ vào bộ nhớ và lưu trữ và sau đó ghi vào hệ thống tập tin để có giới hạn về kích thước tập tin tối đa có thể được lưu trữ. Hầu hết thời gian nó nói ra khỏi trí nhớ. Trong trường hợp của GNU tar, nó có đoạn của tập tin, lưu trữ nó và ghi nó vào bộ nhớ để nó có thể xử lý các tập tin có kích thước bất kỳ. Làm thế nào tôi có thể làm điều đó bằng cách sử dụng mô-đun Lưu trữ :: Tar của Perl.Làm cách nào để tar các tệp lớn hơn bộ nhớ vật lý bằng cách sử dụng Lưu trữ :: Tar của Perl?

Trả lời

6

Dường như có một mô-đun khác không sử dụng cấu trúc trong bộ nhớ: Archive::Tar::Streamed. Nhược điểm là nó đòi hỏi tar để có sẵn trên hệ thống nó được chạy trên. Tuy nhiên, nó là tốt hơn so với puppet-stringing tar mình.

+0

Tài liệu dành cho 'Lưu trữ :: Tar :: Đã phát trực tuyến 'cho biết *" Nó cũng nhằm mục đích di động và có sẵn trên nền tảng không có bản gốc "*. Vì bạn là câu trả lời được chấp nhận, bạn có thể muốn cập nhật nó. – Borodin

12

Có vẻ như Archive::Tar::Wrapper là đặt cược tốt nhất của bạn. Tôi đã không thử nó bản thân mình, nhưng nó sử dụng tar thực thi hệ thống của bạn và không giữ các tập tin trong bộ nhớ.

Trái với Chas. Câu trả lời của Owen, Archive::Tar::Streamedkhông lưu giữ tệp trong bộ nhớ và không sử dụng hệ thống tar của hệ thống. Nó thực sự sử dụng Archive::Tar nội bộ, nhưng nó xử lý một tập tin tại một thời điểm (lợi dụng thực tế là lưu trữ tar có thể được nối). Điều này có nghĩa là Archive :: Tar :: Streamed có thể xử lý các lưu trữ lớn hơn bộ nhớ, miễn là mỗi tệp riêng lẻ trong tệp nén sẽ vừa trong bộ nhớ. Nhưng đó không phải là những gì bạn yêu cầu.

+0

Tôi cho rằng nhược điểm chính của một số người là lớp Wrapper không hoạt động trong Windows, nếu tôi không nhầm, vì nó không có chức năng dòng lệnh 'tar'. Trong trường hợp như vậy, Streamed là một đặt cược tốt hơn. –

Các vấn đề liên quan