Có cách nào để chỉnh sửa các tệp bên trong tệp zip mà không giải nén rõ ràng trước không?


47

Đôi khi tôi cần thay đổi tệp .zip hoặc .jar, vì vậy tôi thường di chuyển tệp đến /tmp, giải nén tất cả các tệp với unzip, chỉnh sửa một vài tệp và sau đó nén lại các tệp. Điều này hoạt động, nhưng nó có thể tẻ nhạt. Có một tiện ích hoặc tập lệnh shell mà tôi có thể sử dụng để chỉnh sửa một tệp bên trong tệp zip mà không cần gọi rõ ràng unzipzip(ngay cả khi đó chỉ là một trình bao bọc xung quanh các lệnh này)?


Chỉ tò mò nếu câu trả lời hoạt động trên các tập tin .jar? (Tôi đã không kiểm tra nó ở đó.)
beroe

@beroe Nó nên được sử dụng thuật toán nén zip. Đó thực sự là động lực chính của tôi khi tìm kiếm giải pháp vì tôi đã triển khai các tệp .war trên máy chủ ứng dụng mà tôi không cảm thấy muốn đóng gói lại và triển khai lại chỉ để sửa đổi một tệp.
austin

Tuyệt quá. Tôi sẽ cố gắng sửa hàm để nó giữ cấu trúc thư mục bên trong kho lưu trữ. Hiện tại tôi nghĩ rằng nó chỉ hoạt động trên các tệp ở cấp độ gốc, nhưng với mục đích của tôi, các thư mục con hữu ích hơn.
beroe

@beroe Điều đó thật tuyệt. Trước khi hỏi điều này, tôi sẽ mã hóa một tập lệnh python để khởi chạy một psudo-shell "bên trong" tệp zip để thực thi các lệnh tùy ý. Tôi sẽ quan tâm đến những gì bạn nghĩ ra.
austin

OK, đã thêm một giải pháp khác để hỗ trợ các thư mục con và nó hoạt động trong thử nghiệm giới hạn .
beroe

Câu trả lời:


19

Bạn có biết tên của tệp trong kho lưu trữ trước khi giải nén nó không? Bạn có thể tạo một chức năng để giải nén /tmp, chỉnh sửa và làm mới zip:

zipedit(){
    echo "Usage: zipedit archive.zip file.txt"
    unzip "$1" "$2" -d /tmp 
    vi /tmp/$2 && zip -j --update "$1"  "/tmp/$2" 
}

Như đã nói, cách sử dụng là:

zipedit myarchive.zip myfile.txt

Điều này giải nén tệp được đặt tên từ kho lưu trữ, lưu nó vào /tmp, chỉnh sửa nó visau đó thêm nó trở lại vào kho lưu trữ, trong khi "bỏ qua" đường dẫn. Thêm vào .bash_profile của bạn, giả sử bash...

EDIT: Dưới đây là phiên bản hoạt động với các thư mục con bên trong kho lưu trữ ... Lưu ý, không sử dụng dấu gạch chéo trước tên của thư mục (nghĩa là myfolder/file.txtkhông sử dụng /myfolder/file.txt). Nếu bạn chỉnh sửa một tệp chưa tồn tại trong kho lưu trữ, nó sẽ tạo nó cho bạn. Cũng không chắc chắn nếu nó sẽ làm việc với đường dẫn tuyệt đối đến tệp zip. Tốt nhất gắn bó với người thân.

zipedit(){
    echo "Usage: zipedit archive.zip folder/file.txt"
    curdir=$(pwd)
    unzip "$1" "$2" -d /tmp 
    cd /tmp
    vi "$2" && zip --update "$curdir/$1"  "$2" 
    # remove this line to just keep overwriting files in /tmp
    rm -f "$2" # or remove -f if you want to confirm
    cd "$curdir"
}

Cảm ơn câu hỏi. Có lẽ tôi cũng sẽ sử dụng cái này!

Một chỉnh sửa khác: Chưa được kiểm tra, nhưng tôi đã đọc nó vimemacscả hai sẽ chỉnh sửa trực tiếp các tệp jar?


Tôi có thể xác nhận rằng vim hoạt động tuyệt vời để chỉnh sửa các tệp zip từ dòng lệnh trên Linux, cảm ơn rất nhiều vì tiền boa!
Thomas Bindzus

60

Vim hỗ trợ chỉnh sửa trong suốt các tệp trong tệp zip. Chỉ cần thực hiện:

vim file.zip

và bạn sẽ được hiển thị một danh sách các tập tin trong kho lưu trữ zip. Chọn cái bạn muốn chỉnh sửa, thay đổi những gì bạn muốn và thoát với: x

Nếu vimtrả lời:

Không thể thực hiện thay đổi, 'có thể sửa đổi' bị tắt

.. chỉ cần chạy :set modifiablehoặc :set ma(nguồn: https://stackoverflow.com/questions/5745506/vim-modifiable-is-off )


2
Nhân tiện, hỗ trợ zip mặc định trong vim chỉ cho phép chỉnh sửa ZIP một cấp. Nếu bạn cần chỉnh sửa ZIP trong ZIP, bạn nên sử dụng plugin vim này .
jesjimher

1
Tương tự với emacs.
Mike

4
Điều này nên được đánh dấu là câu trả lời đúng
Martijn Burger

3
cứu người. tính năng thực sự thú vị của vim và cũng khá bất ngờ
Peter Perháč

4

Câu trả lời ngắn gọn: KHÔNG.

Nếu đó là một trình bao bọc, bạn đang gọi các lệnh này. Dù sao, điều tốt nhất tôi có thể nghĩ đến là mở tệp bằng cách sử dụng file-roller, nếu bạn ở trong môi trường X, có thể hoạt động với một cú nhấp chuột đơn giản, tùy thuộc vào thiết lập của bạn. Sau đó, bạn có thể nhấp đúp vào tệp nén để mở tệp và sau đó bạn có thể chỉnh sửa tệp:

$ file-roller b3.zip 

Khi bạn lưu tệp đã chỉnh sửa của mình, bạn sẽ nhận được hộp thoại này:

Bạn cũng có thể tạo một tập lệnh cho việc này, nhưng điều đó trở nên phức tạp nếu bạn có tài liệu lưu trữ nén có chứa nhiều tệp. Hãy cho tôi biết nếu đó là những gì bạn cần và tôi có thể nấu món gì đó lên.

nhập mô tả hình ảnh ở đây


0

Câu trả lời ngắn gọn; Không. Nếu bạn nghĩ về việc nén, bạn đang sử dụng dự phòng để rút ngắn các tệp bên trong, do đó, mọi chỉnh sửa sẽ thay đổi toàn bộ tệp trong kho lưu trữ, có thể là tệp lưu trữ.

Nếu bạn ít lý thuyết hơn, thực tế hơn, nhiều hơn "Tôi không muốn phải giải nén / zip thủ công", có những công cụ mà bạn có thể sử dụng. Ark trên Linux là một cái tôi đã sử dụng. Bạn cũng có thể gắn kết kho lưu trữ với fuse-zip , mặc dù điều đó có thể làm việc nhiều hơn một tệp tạm thời.


không biết tại sao ai đó lại cho -1. +1 cho fuse-zip.
myrdd

0

Theo trang man cho zip(phiên bản trực tuyến để tham khảo dễ dàng: http://linux.die.net/man/1/zip ), ziplệnh có một -ucờ mà nó mô tả là:

Thay thế (cập nhật) một mục hiện có trong kho lưu trữ zip chỉ khi nó đã được sửa đổi gần đây hơn phiên bản đã có trong kho lưu trữ zip.


0

Trình quản lý tệp thư mục Opus 12 sẽ cho phép bạn duyệt Zip, sau đó kéo và thả tệp đã chỉnh sửa từ thư mục khác vào đó và ghi đè lên tệp bạn muốn chỉnh sửa và nó sẽ thực hiện tất cả một cách nhanh chóng. Rất dễ



0

Bạn có thể sử dụng trình soạn thảo văn bản KDE độc lập chẳng hạn:

  1. mở lưu trữ trong quản lý lưu trữ
  2. mở tệp văn bản trong trình soạn thảo gui KDE
  3. lưu tệp văn bản và hệ thống yêu cầu bạn làm mới kho lưu trữ - nhấp vào có
  4. đừng quên quyền cho phép lưu trữ và thư mục lưu trữ (lỗi yêu thích của tôi)

Vui lòng sửa định dạng trên bài viết của bạn.
davidbaumann
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.