Linux: Chỉ định thư mục cấp cao nhất khi tạo tệp lưu trữ zip


17

Tôi có dự án với cấu trúc thư mục thông thường (src /, bin /, ...), tức là

project-name/
|-- bin
|-- lib
|-- src
`-- Makefile

Và muốn tạo một kho lưu trữ với cấu trúc thư mục sau:

project-name-version/
|-- bin
|-- lib
|-- src
`-- Makefile

Có một cách gọn gàng để làm điều này, mà tránh tạo một thư mục tạm thời project-name/ở nơi khác, sau đó sao chép các tệp bên trong một cuộc gọi cuối cùng zip -r ...trên thư mục tạm thời đó?

(Về cơ bản tôi đang tìm kiếm một số loại tiền tố đường dẫn hoặc tùy chọn đường dẫn tương đối.)

Câu trả lời:


9

Có thể điều này đã xảy ra với bạn, nhưng tại sao không chỉ sử dụng một liên kết sym chứ không phải sao chép mọi thứ?

ln -s project-name project-name-version

sau đó sử dụng zip -rthông qua liên kết sym ( ziptheo mặc định sẽ liên kết sym sym)? Khi bạn hoàn thành, bạn có thể chỉ cần rmliên kết sym. Có lẽ đó không phải là giải pháp tao nhã nhất, nhưng tôi không biết một cách rõ ràng để thực hiện ziptrực tiếp.


1
Điều này cũng hoạt động với tarnếu bạn sử dụng -hcờ.
Kyle Strand

(Tôi cũng đang sử dụng zcờ; Tôi không chắc điều đó có ảnh hưởng đến nó không.)
Kyle Strand

15

Đây là một lời khuyên hơn là một câu trả lời: sử dụng Git !

Nếu bạn thiết lập kho lưu trữ Git cho dự án của mình, toàn bộ điều này trở nên khá đơn giản:

git archive HEAD --prefix=project-name-version/ \
    --format=zip -o project-name-version.zip

1
Lời khuyên tuyệt vời, cảm ơn bạn. tài liệu lưu trữ git: git-scm.com/docs/git-archive
Meglio

1
Mặc dù sử dụng kiểm soát phiên bản là một ý tưởng tốt, câu trả lời này không phù hợp với câu hỏi cho trường hợp chung.
raimue

@ Yêu cầu "Đây là một lời khuyên hơn là một câu trả lời: sử dụng Git!" được viết ở đó từ 4 năm nay, cảm ơn bạn đã chỉ ra ...
cYrus

1
Nếu đây không phải là một câu trả lời, nó nên được chuyển đổi thành một bình luận.
raimue

1
@Gregor Tôi nghĩ rằng đó là một hành vi mong muốn như tập tin như vậy thực sự là một phần của dự án, dù sao bạn có thể sử dụng Git thuộc tính, ví dụ, tạo một tập tin có tên .gitattributeschứa .git* export-ignore.
cYrus
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.