Làm thế nào để chỉ trích xuất một thư mục cụ thể từ một kho lưu trữ được nén vào một thư mục nhất định?


59

Làm thế nào để trích xuất một thư mục cụ thể từ một kho lưu trữ được nén vào một thư mục nhất định?

Tôi đã thử sử dụng

unzip "/path/to/archive.zip" "in/archive/folder/" -d "/path/to/unzip/to"

nhưng điều đó chỉ tạo thư mục trên đường dẫn mà tôi muốn giải nén và không làm gì khác.

Câu trả lời:


60
unzip <target-zip-file> '<folder-to-extract/*>' -d <destination-path> 

hoạt động tốt trên EL 6


3
EL 6 này là gì?
Zelda

2
Enterprise Linux 6 (RHEL6) - Mũ đỏ.
slm

Điều này cũng hoạt động; về cơ bản nó giống như câu trả lời của Mark Adler, nhưng theo một cách hơi khác.
Enkouyami

@Enkouyami Trừ sự khác biệt trong trích dẫn, có vẻ như chính xác điều tương tự.
Camilo Martin

1
@Enkouyami Bởi vì dấu gạch chéo ngược trong dấu ngoặc kép thoát khỏi một ký tự (được cho là dấu hoa thị đang được thoát, nhưng tôi đoán đó là một lỗi đánh máy), trong khi trong dấu ngoặc đơn, dấu gạch chéo ngược không được giải thích. Nếu ai đó muốn một dấu gạch chéo ngược theo nghĩa đen, "\\"sẽ được sử dụng (nếu không bạn luôn phải nhớ những ký tự nào là lối thoát đặc biệt). Vì vậy, đó là một sự khác biệt trích dẫn nếu tác giả có nghĩa là "trích dẫn nhân vật toàn cầu" (không cần thiết). Dù bằng cách nào, một dấu gạch chéo ngược như thế là lỗi chính tả.
Camilo Martin ngày

39

Thử:

unzip /path/to/archive.zip 'in/archive/folder/*' -d /path/to/unzip/to

4
đã làm điều này? Tôi nhận được caution: filename not matched: foldername/\*khi chạy unzip $repozip "$2-master/\*" -d /srv/www/magento/ở đâu $2là tên thư mục trong zip Tôi muốn kéo tất cả các tệp và thư mục ra khỏi
jeremy.bass

10
Làm việc mà không có \, chỉ "path/*".
Alex

8
Có cách nào để trích xuất nội dung của "trong / archive / thư mục / *" không bảo toàn đường dẫn "trong / archive / thư mục /" không? Tôi kết thúc bằng cách sử dụng mvsau đó để có được các tập tin mà tôi cần chúng.
jerrygarciuh

6
Sử dụng -jcho điều đó.
Đánh dấu Adler

4
-jdải tất cả thông tin đường dẫn và tất cả các tệp đi vào thư mục đích. Có cách nào để loại bỏ chỉ phần chung của đường dẫn không? Akin để zip -r.
Bob Stein

6

Hai câu trả lời hiện tại đều đúng, nhưng hơi khó để xác định thư mục đích, cần được làm rõ hơn.

Giả sử /target/root/là thư mục tiêu theo hành động giải nén ban đầu, ví dụ:

unzip -qq src.zip -d "/target/root/"

Sau đó, chúng ta cần sử dụng giống /target/root/như thư mục đích sau đó mặc dù chúng tôi chỉ muốn trích xuất một thư mục con cụ thể, như cách giải nén hoạt động:

unzip -qq src.zip "sub/dir/*" "/target/root/"

Rốt cuộc, quy tắc thực sự đơn giản, sử dụng cùng thư mục gốc cho -dtùy chọn .

BTW, -qqtùy chọn là để giải nén thực sự yên tĩnh, hãy thoải mái loại bỏ nó.


FYI: Tôi đã làm <kbd> unzip -qq 2.3.zip "magento2-2.3 / eller / *" "nhà cung cấp /" </ kbd> và nhận <kbd>: tên tệp không khớp: nhà cung cấp / `</ kbd>. Đây là trên một cài đặt Ubuntu trong bash. Tôi hiếm khi giải nén, có lẽ đã làm gì đó sai ...
Chris K
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.