Zip một tập tin mà không bao gồm thư mục cha


12

Tôi có một thư mục chứa nhiều tệp

thư mục

  • artifact1.app
  • artifact2.ext2
  • tạo tác3.ext3
  • ...

Mục tiêu của tôi là nén tệp từ bên ngoài thư mục này (vì vậy không sử dụng cdlệnh) mà không bao gồm thư mục dir.

zip -r ./folder/artifact.zip ./folder/artifact1.app

Lệnh này bao gồm thư mục dir trong zip cuối cùng. Có gợi ý nào không?

Câu hỏi liên quan: Zip nội dung của một thư mục mà không bao gồm chính thư mục đó


1
Từ các trang man, có vẻ như chỉ -jáp dụng và sẽ nén tất cả các thư mục vào một thư mục cấp gốc trong ZIP. Đó không phải là những gì bạn đang tìm kiếm, phải không?
phyrfox

@phyrfox Có lẽ có. Cần xác minh nó. Cảm ơn.
Lorenzo B

Câu trả lời:


13

Nếu bạn muốn lưu trữ tất cả các tệp trong foldertên của họ mà không có chỉ dẫn thư mục, bạn có thể sử dụng -jtùy chọn.

zip -j folder/artifact.zip folder/artifact1.app folder/artifact2.ext2 folder/artifact3.ext3

hoặc là

zip -j folder/{artifact.zip,artifact1.app,artifact2.ext2,artifact3.ext3}

Nếu bạn có tệp trong thư mục con, chúng sẽ không có bất kỳ thành phần thư mục nào trong kho lưu trữ, ví dụ: folder/subdir/foosẽ được lưu trữ trong kho lưu trữ dưới dạng foo.

Nhưng nó có thể sẽ dễ dàng hơn để thay đổi thư mục. Nó gần như chính xác cùng số lượng gõ như phương pháp niềng răng aboe. Nếu bạn làm điều đó, nếu bạn bao gồm các tệp trong thư mục con, chúng sẽ có đường dẫn tương đối từ thư mục bạn đã thay đổi, ví dụ như folder/subdir/foosẽ được lưu trữ dưới dạng subdir/foo.

(cd folder && zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3)

Để sử dụng tương tác, bạn mất hoàn thành shell theo cách này, vì shell không nhận ra rằng bạn sẽ ở trong một thư mục khác khi bạn chạy ziplệnh. Để khắc phục điều đó, ban hành cdlệnh riêng. Để dễ dàng quay lại thư mục trước, bạn có thể sử dụng pushdpopd.

pushd folder
zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3
popd

Nếu bạn muốn kiểm soát hoàn toàn các đường dẫn được lưu trữ trong tệp zip, bạn có thể tạo một rừng các liên kết tượng trưng. Trừ khi được hướng dẫn khác, zipkhông lưu trữ các liên kết tượng trưng.


Bạn không cần phải liệt kê rõ ràng tất cả các tệp trong thư mục con ( folder), bạn chỉ có thể sử dụng ký tự đại diện, tức làzip -j folder/*
Jakub Kukul

Dựa vào việc mở rộng shell có nghĩa là các dotfiles (ví dụ .profile) sẽ không được đưa vào kho lưu trữ. Thay vào đó, thay đổi thư mục làm việc hiện tại và chỉ định .là tệp sẽ được lưu trữ:cd folder && zip -r ../folder.zip .
sheldonh
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.