Làm cách nào để giải nén ZIP nhiều phần (kéo dài) trên Linux?


74

Tôi cần tải tệp 400mb lên máy chủ web của mình, nhưng tôi bị giới hạn ở mức tải lên 200mb. Máy chủ của tôi đề nghị tôi sử dụng một kho lưu trữ kéo dài, điều mà tôi chưa bao giờ thực hiện trên Linux.

Tôi tạo ra một bài kiểm tra trong thư mục riêng của mình, nén lên một PDF vào test.zip.001, .002.003. Làm thế nào để tôi đi về giải nén nó? Tôi có cần tham gia cùng họ trước không?

Xin lưu ý rằng tôi sẽ rất vui khi sử dụng 7z như tôi đang sử dụng các định dạng ZIP. Nếu điều này làm cho bất kỳ sự khác biệt với kết quả.


Điều này có thể không hữu ích trên máy chủ web có cài đặt phần mềm giới hạn, nhưng tôi chưa thấy giải pháp này ở bất kỳ nơi nào khác và đó là những gì tôi sử dụng: API java.util.zip đã xử lý tất cả các phần ZIP tôi đã sử dụng , ngay cả trong trường hợp tổng quát hơn về việc không có phần đuôi hoặc phần cuối không hoàn chỉnh. Tôi gọi nó từ Jython vì vậy nó ở dạng kịch bản và đây là mã: github.com/combatopera/unzipparts
Andrzej Cichocki

Câu trả lời:


75

Bạn sẽ cần tham gia với họ trước. Bạn có thể sử dụng ứng dụng linux phổ biến, catnhư trong ví dụ dưới đây:

cat test.zip* > ~/test.zip

Điều này sẽ nối tất cả các bạn test.zip.001, test.zip.002, vv tập tin vào một lớn hơn, tập tin test.zip. Khi bạn có tệp duy nhất đó, bạn có thể chạyunzip test.zip

"Cách tạo, phân tách, tham gia và trích xuất tài liệu lưu trữ zip trong Linux" có thể giúp ích.


1
OK, tôi thích điều đó ... Tiến bộ ... Nhưng tôi thực sự là một Linux n00b ở đây. Tôi giả sử x*là tên tệp? Và ~/hugefilelà một thư mục? Mục đích của biểu tượng dấu ngã là gì? Xin lỗi để hỏi những gì tôi nghi ngờ là những câu hỏi rất cơ bản.
Tim

Khi bạn tách các tệp, bạn nên sử dụng một tiền tố như x_ (ví dụ: x_split1, x_split2, ...; giống như các cửa sổ hậu tố tập tin.001, tệp.002 ... vv) dấu ngã đại diện cho thư mục chính của bạn. ~ / hugefile giống như / home / tim / hugefile. bạn đã chia các tập tin của bạn? tên tập tin phân chia là gì?
từnaboo

1
Tôi nghĩ rằng tôi nhìn thấy nơi vấn đề này sẽ đi vào, lưu trữ Spanned đã được tạo ra trong các cửa sổ, sử dụng 7zip có phần mở rộng ZIP, vì vậy nó tự động tạo ra khi TEST.zip.001, TEST.zip.002TEST.zip.003điều đó có nghĩa chia tay là rất khác nhau. Có vẻ như việc ném linux trên VMWare có thể dễ dàng hơn và tạo các tệp ở đây, sau đó ít nhất tôi chỉ làm việc với 1 HĐH. Bạn có thể sử dụng lệnh SPLIT trên bất kỳ loại tệp nào không? tức là hình ảnh, phim âm thanh v.v?
Tim

có, lệnh split hoạt động trên bất kỳ tập tin nào. cài đặt p7zip với apt-get install p7zip trên debian hoặc yum cài đặt p7zip trên fedora, tham gia các tệp với: cat TEST.zip. *> lưu trữ và giải nén chúng với.
từ

1
7za x archivecó lẽ tốt hơn nếu kho lưu trữ chứa cấu trúc thư mục.
slm

38

unzipTiện ích Linux không thực sự hỗ trợ nhiều khóa. Từ hướng dẫn :

Lưu trữ nhiều phần chưa được hỗ trợ, ngoại trừ kết hợp với zip. (Tất cả các bộ phận phải được nối với nhau theo thứ tự, và sau đó zip -F (đối với zip 2.x) hoặc zip -FF(đối với zip 3.x) phải được thực hiện trên kho lưu trữ được nối để có thể sửa chữa lưu trữ nhiều phần (tách) vào kho lưu trữ một tệp kết hợp bằng cách sử dụng zip -s- inarchive -O outarchive. Xem trang hướng dẫn zip 3 để biết thêm thông tin.)

Vì vậy, trước tiên bạn cần ghép các mảnh, sau đó sửa chữa kết quả. cat test.zip.*nối tất cả các tệp được gọi là test.zip.*ký tự đại diện *cho bất kỳ chuỗi ký tự nào; các tập tin được liệt kê theo thứ tự từ điển, giống như thứ tự số nhờ các số 0 dẫn. >test.zipchỉ đạo đầu ra vào tập tin test.zip.

cat test.zip.* >test.zip
zip -FF test.zip --out test-full.zip
unzip test-full.zip

Nếu bạn đã tạo các mảnh bằng cách chia trực tiếp tệp zip, trái ngược với việc tạo một zip nhiều phần với tiện ích chính thức của LOLzip, tất cả những gì bạn cần làm là tham gia các phần.

cat test.zip.* >test.zip
unzip test.zip

1
lệnh thứ 2 phải là zip -FF test.zip --out test-full.zip - sẽ gây ra lỗi cho bạn nếu không có lệnh --out
Alvin

3
Đối với tôi, FFcách tiếp cận hiệu quả nếu tôi chỉ zipvào tệp đa phần đầu tiên, không catcần thiết.
Jāni Elmeris

1
Như @ JānisElmeris đã được đề cập, không cần phải nối các tài liệu lưu trữ trước khi sử dụng zip -FFchúng.
René

24
7z x archive.zip.001

Nó sẽ tự động tìm phần còn lại


1
Điều đó thật kỳ lạ ... Để làm việc này, trước tiên bạn cần đổi tên tất cả các tệp ZIP (.zXX và .zip) thành .zip.xxx (.zip là phần cuối cùng), sau đó bạn có thể sử dụng 7z x trên tệp đầu tiên , "trích xuất" thành một zip được nối, sau đó có thể được giải nén lại bằng cách giải nén nhưng không phải 7z ... Tôi không hoàn toàn chắc chắn nếu tập tin đã được giải nén chính xác nhưng ít nhất lần này giải nén không tuân thủ các lỗi CRC .. ZIP rất khó bị phá vỡ trên Linux - tránh nếu bạn có thể. :(
Energiequant

ít nhất là đối với centos, chúng tôi cũng cần hướng dẫn cách cài đặt 7z
stiv

20

Tôi tìm thấy câu trả lời ở đây: https://superuser.com/a/517758/10264

Câu trả lời này có khái niệm tương tự như của Gilles , cụ thể là trước tiên bạn kết hợp kho lưu trữ tách thành một kho lưu trữ thông thường bằng cách sử dụng split, và sau đó bạn giải nén nó bằng cách giải nén.

Sự khác biệt là thay vì sử dụng -FFcờ không hoạt động với tôi, bạn chỉ cần nói với zip để đóng gói lại tệp đã tách mà không tách. Đó là những gì -s 0lá cờ có nghĩa.

Vì vậy, trước tiên, kết hợp lưu trữ phân chia thành một kho lưu trữ duy nhất:

zip -s 0 split-foo.zip --out unsplit-foo.zip

Sau đó, giải nén tệp lưu trữ duy nhất bằng cách giải nén:

unzip unsplit-foo.zip

2
Đây là câu trả lời đúng cho zip 3.x
texasbruce

0

Chỉ là một ví dụ khác. Điều này làm việc cho tôi trong bash để phân chia trình cài đặt 3 GB oracle:

echo "<installOracleDB.sh>: Splitting OracleDB installer"
zip /tmp/linuxx64_12201_database.zip --out /tmp/linuxx64_12201_oradb.zip -s 1000m
echo "<installOracleDB.sh>: Merging OracleDB installer"
zip -FF /tmp/linuxx64_12201_oradb.zip --out /tmp/linuxx64_12201_database.zip
echo "<installOracleDB.sh>: Removing temporary files OracleDB installer"
find /tmp -type f -name 'linuxx64_12201_oradb*' -exec rm {} +
echo "<installOracleDB.sh>: Unizipping OracleDB installer"
unzip /tmp/linuxx64_12201_database.zip

Điều này trông rất giống với câu trả lời trước. Bạn có thể giải thích những gì nó đang làm, và nó khác với những gì đã được đăng? Xin vui lòng không trả lời trong các ý kiến; chỉnh sửa câu trả lời của bạn để làm cho nó rõ ràng và đầy đủ hơn.
Scott

Xin chào Scot, tôi ước tôi có thể trả lời trong các bình luận nhưng tôi phải có ít điểm để làm điều đó ngay bây giờ. Câu trả lời này cung cấp một danh sách đầy đủ các lệnh để phân tách, hợp nhất và giải nén một tệp lớn trên unix. Tôi sẽ cung cấp thêm văn bản giải thích để làm rõ câu trả lời của tôi. Cảm ơn bạn đã trả lời của bạn.
TheHagueCoder

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.