Câu hỏi Cách cập nhật một tệp trong kho lưu trữ zip


Có thể thay thế tệp trong tệp zip mà không giải nén xóa tệp cũ thêm tệp mới và mở lại tệp không?

Lý do là tôi có một tệp zip thực sự lớn có một xml bên trong tệp zip mà tôi phải cập nhật đôi khi. Giải nén zip và giải nén nó mất một thời gian dài. Vì vậy, tôi muốn chỉ có thể thay thế một xml bên trong zip thông qua một kịch bản. Tôi đã có kiểm tra các bản cập nhật trên xml mà tôi có.

Vì vậy, nó có thể chỉ cần thay thế một xml mà không giải nén và tái trang bị?

Xin lỗi tôi sẽ sử dụng lệnh zip để làm những việc như thế nhưng vấn đề là kịch bản thực sự là cho một điện thoại Android và zip không phải là một lệnh tôi có thể sử dụng tiếc là tôi đã bỏ nó ra. Tôi đã sử dụng zip chắc chắn nếu tôi có thể nhưng tôi chỉ có giải nén cho droid và sau đó có tar trong busybox nhưng tar không làm những gì tôi cần


51
2018-01-25 22:24


gốc


bạn có thể thay đổi tiêu đề câu hỏi thành một cái gì đó có ý nghĩa hơn không? - tokland
Ngoài ra, câu hỏi có thể là một hoặc hai câu. Khoảng 80% của nó là rambling. - Dennis Williamson


Các câu trả lời:


Từ zip (1):

Khi được cung cấp tên của một kho lưu trữ zip hiện có, zip sẽ thay thế các mục nhập có tên giống hệt nhau trong kho lưu trữ zip hoặc thêm các mục nhập cho tên mới.

Vì vậy, chỉ cần sử dụng zip lệnh như bạn thường tạo một tệp .zip mới chỉ chứa một tệp đó, ngoại trừ tên tệp .zip mà bạn chỉ định sẽ là tệp lưu trữ hiện có.


42
2018-01-25 22:27



Ai đó có thể đưa ra một ví dụ, xin vui lòng? Tôi không hiểu sự trợ giúp của lệnh zip. - Gustave
Giả sử bạn nén thư mục bằng cách sử dụng zip -r myfolder.zip myfolder nếu bạn muốn cập nhật myfolder/otherfolder/myfile.txt, tiếp tục và chỉnh sửa tệp và chạy zip -r myfolder.zip myfolder/otherfolder/myfile.txt - eakkas
Làm thế nào để làm điều đó nếu các tập tin để thay thế không có cùng tên hoặc cấu trúc tương tự mà các tập tin được repalced? - Fractaliste
@Fractaliste Bạn phải làm cho nó có cùng tên và cấu trúc;) - Penn


Tôi đã tìm thấy Linux zip tập tin để được cồng kềnh để thay thế một tập tin trong một zip. Các jar tiện ích từ Bộ phát triển Java có thể dễ dàng hơn. Xem xét nhiệm vụ phổ biến của việc cập nhật WEB/web.xml trong tệp JAR (chỉ là tệp zip):

jar -uf path/to/myapp.jar -C path/to/dir WEB-INF/web.xml

Đây, path/to/dir là đường dẫn đến thư mục chứa WEB-INF thư mục (có chứa web.xml).


58
2018-01-17 22:06





Hãy thử những điều sau đây:

zip [zipfile] [file to update] 

Một ví dụ:

$ zip test.zip test/test.txt
adding: test/test.txt (stored 0%)

20
2018-03-21 21:17



Đây là cách dễ hiểu nhất nhờ vào ví dụ, cảm ơn! - vatsug


Tôi biết đây là câu hỏi cũ, nhưng tôi cũng muốn làm như vậy. Cập nhật tệp trong kho lưu trữ zip. Và không có câu trả lời nào ở trên thực sự giúp tôi.

Đây là những gì tôi đã làm. Đã tạo thư mục tạm thời abc. Đã sao chép file.zip đến abc và trích xuất tệp trong thư mục đó. Tôi đã chỉnh sửa tệp mà tôi muốn chỉnh sửa. Sau đó, trong khi đang ở abc, chạy lệnh sau

user@host ~/temp/abc $ zip -u file.zip
updating: content/js/ (stored 0%)
updating: content/js/moduleConfig.js (deflated 69%)

-u chuyển đổi sẽ tìm kiếm các tập tin đã thay đổi / mới và sẽ thêm vào kho lưu trữ zip.


13
2017-12-29 14:40





Sử dụng cờ cập nhật: -u

Thí dụ:

zip -ur existing.zip myFolder

Lệnh này sẽ nén và thêm myFolder (và nội dung của nó) đến existing.zip.


Sử dụng nâng cao:

Cờ cập nhật thực sự so sánh các tệp đến với các tệp hiện có và sẽ thêm tệp mới hoặc cập nhật các tệp hiện có.

Do đó, nếu bạn muốn thêm / cập nhật một thư mục con cụ thể trong tệp zip, chỉ cần cập nhật nguồn như mong muốn và sau đó nén lại toàn bộ nguồn bằng -u cờ. Chỉ các tệp đã thay đổi mới được nén.

Nếu bạn không có quyền truy cập vào tệp nguồn, bạn có thể giải nén tệp zip, sau đó cập nhật các tệp mong muốn và sau đó nén lại bằng -u cờ. Một lần nữa, chỉ có các tập tin thay đổi sẽ được nén.

Thí dụ:

Cấu trúc nguồn gốc


ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│   ├── file3.txt
│   ├── Logs
│   │   ├── logs1.txt
│   │   ├── logs2.txt
│   │   ├── logs3.txt

Cấu trúc nguồn được cập nhật


ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│   ├── file3.txt
│   ├── Logs
│   │   ├── logs1.txt
│   │   ├── logs2.txt
│   │   ├── logs3.txt 
│   │   ├── logs4.txt & lt-- TẬP_TIN MỚI 

Sử dụng

$ zip -ur existing.zip ParentDir 
> updating: ParentDir/ChildDir/Logs (stored 0%)
>   adding: ParentDir/ChildDir/Logs/logs4.txt (stored 96%)

8
2018-04-26 15:01





Bạn có thể dùng: đường dẫn zip -u file.zip / file_to_update


3
2017-09-04 17:26





Ngoài ra còn có tùy chọn -f sẽ làm mới tệp zip. Nó có thể được sử dụng để cập nhật tất cả các tệp đã được cập nhật kể từ khi mã zip được tạo (giả sử chúng nằm trong cùng một vị trí trong cấu trúc cây trong tệp zip).

Nếu tệp của bạn có tên /myfiles/myzip.zip, tất cả những gì bạn phải làm là

zip -f /myfiles/myzip.zip

1
2018-03-19 15:48





Từ phía cấu trúc lưu trữ ZIP - bạn có thể cập nhật tệp zip mà không cần nén lại, bạn chỉ cần bỏ qua tất cả các tệp trước tệp bạn cần thay thế, sau đó đặt tệp đã cập nhật của bạn và sau đó là phần còn lại của tệp. Và cuối cùng bạn sẽ cần phải đặt cấu trúc thư mục trung tâm được cập nhật. Tuy nhiên, tôi nghi ngờ rằng các công cụ phổ biến nhất sẽ cho phép bạn thực hiện điều này.


0
2018-03-21 21:47





7zip (7za) có thể được sử dụng để thêm / cập nhật tệp / thư mục độc đáo:

Thí dụ:  Thay thế (bất kể ngày tệp) MANIFEST.MF tệp trong tệp JAR. Các /source/META-INF thư mục chứa MANIFEST.MF tệp mà bạn muốn đưa vào jar (zip):

7za a /tmp/file.jar /source/META-INF/

Chỉ cập nhật (không thay thế mục tiêu nếu nguồn cũ hơn)

7za u /tmp/file.jar /source/META-INF/

0
2017-10-12 11:32