Tạo một kho lưu trữ từ một thư mục mà không cần thêm tên thư mục vào kho lưu trữ


83

Tôi có cấu trúc thư mục sau:

  • nguồn gốc
    • thư mục1
    • thư mục2
    • thư mục3
    • 7za.exe

Tôi muốn chạy công cụ dòng lệnh 7-zip để nén tất cả các tệp vào folder1một tệp zip được gọi folder1.zip.

Chạy như sau

7za.exe a -tzip folder1.zip folder1\\*.*

tạo ra một tệp zip như mong đợi. Tuy nhiên, khi tôi mở tệp zip, nó có một thư mục được gọi folder1và bên trong tôi có tất cả các tệp nằm trong thư mục đó. Tôi không muốn tên thư mục được thêm vào thư mục zip, tức là tôi muốn thêm tất cả các tệp ở định dạng tệp "Căn hộ".

Tôi cũng không muốn chạy đệ quy công cụ dòng lệnh cho từng tệp / thư mục riêng lẻ.

Có một công tắc cung cấp chức năng này?


Bạn có thể cdvào thư mục1 và 7za.exe a -tzip ..\folder1.zip *.*?
zpletan

Câu trả lời:


136

Từ tệp Trợ giúp 7-Zip :

một lệnh (Thêm)

Thêm tệp để lưu trữ.

Ví dụ

7z a archive1.zip subdir\

thêm tất cả các tệp và thư mục con từ thư mục con vào kho lưu trữ archive1.zip. Tên tệp trong kho lưu trữ sẽ chứa tiền tố phụ \.

7z a archive2.zip .\subdir\*

thêm tất cả các tệp và thư mục con từ thư mục con vào kho lưu trữ archive2.zip. Tên tệp trong kho lưu trữ sẽ không chứa tiền tố phụ \.

cd /D c:\dir1\

7z a c:\archive3.zip dir2\dir3\

Tên tệp trong kho lưu trữ c: \ archive3.zip sẽ chứa tiền tố dir2 \ dir3 \, nhưng chúng sẽ không chứa tiền tố c: \ dir1 \.

Vì vậy, lệnh bạn muốn sẽ là: 7za.exe a folder1.zip .\folder1\*

Ngoài ra, hãy chú ý đến việc xử lý các ký tự đại diện của 7-Zip. Nó không coi *.*là "tất cả các tệp" - nó có nghĩa là "tất cả các tệp có một khoảng thời gian trong tên tệp." Các tập tin mở rộng sẽ bị bỏ lỡ. Nếu bạn thực sự muốn tất cả các tập tin, chỉ cần sử dụng *thay thế.

Cuối cùng, -tziptham số không cần thiết nếu tên tệp lưu trữ kết thúc bằng .zip. 7-Zip đủ thông minh để tìm ra định dạng bạn muốn trong những trường hợp đó. Nó chỉ được yêu cầu khi bạn muốn có tiện ích mở rộng tùy chỉnh (ví dụ: Phần bổ 7za.exe a -tzip foo.xpi <files>trợ Mozilla).


2

Điều này làm việc cho tôi

Hãy xem xét cấu trúc thư mục như C: \ Parent \ SubFolders ..... Và bạn muốn tạo Parent.zip sẽ chứa tất cả các tệp và thư mục C: \ Parent không có thư mục cha mẹ [tức là nó sẽ bắt đầu từ SubFolders .....]

cd /D "C:\Parent"

"7z.exe" a Parent.zip "*.*" -r

Điều này sẽ tạo Parent.zip trong C: \ Parent


2
Điều này trùng lặp một câu trả lời khác và không thêm nội dung mới. Vui lòng không đăng câu trả lời trừ khi bạn thực sự có điều gì đó mới để đóng góp.
DavidPostill

Trong khi tôi đang tìm kiếm giải pháp, tôi đã không nhận được chính xác giải pháp này. Rõ ràng tôi sẽ không chỉ sao chép dán một số câu trả lời tôi tìm thấy trực tuyến. Tôi dành một chút thời gian cho nó vì vậy tôi cảm thấy tôi nên chia sẻ nó. Theo tôi, bạn có thể tìm thấy câu trả lời chính xác này tại đây và trên Stack Overflow được đăng bởi tôi.
Pritesh Dhokchaule

Lưu ý rằng 7-Zip không coi *.*là "tất cả các tệp" mà là "tất cả các tệp có một khoảng thời gian là một phần của tên tệp." Vì vậy, câu trả lời này sẽ thực sự bỏ qua các tệp không có phần mở rộng (điều này được ghi chú trong câu trả lời được chấp nhận).
Bill_Stewart

1

Chỉ để mở rộng câu trả lời được chấp nhận (tôi không thể thêm nhận xét ở đó):

Trên Linux, việc thêm '*' không hiệu quả với tôi, vì vậy tôi đã kết thúc việc tạo ra dòng lệnh dài dòng hơn cho kết quả mong muốn:

curr_dir=$(pwd); \ 
cd source_code/lambda/ ; \
7z a ../../lambda.zip .; \
cd $curr_dir \
unset curr_dir

===========

giải thích kịch bản:

  • lưu đường dẫn dir hiện tại để sử dụng sau này;
  • điều hướng đến thư mục cần được lưu trữ;
  • tạo lưu trữ (thông báo '.' (dấu chấm) ở cuối);
  • quay trở lại thư mục gốc;
  • thoát khỏi biến lưu trữ đường dẫn dir gốc

Tôi hy vọng nó có thể hữu ích cho ai đó.


Tôi đề nghị đặt *dấu ngoặc kép (nếu không, trình bao sẽ mở rộng nó thành các tệp tại vị trí này).
Simon Sobisch

-1

Còn cái này thì sao. ví dụ: Thư mục / subFolder1, Thư mục / thư mục con2

chọn tất cả thư mục con> nhấp chuột phải rồi tạo tệp lưu trữ> chọn bất kỳ định dạng nào

* Tên lưu trữ sẽ là thư mục mẹ ..

Đơn giản phải không?


3
Câu hỏi là về CLI cho 7-zip, không phải cách sử dụng GUI. Học cách sử dụng GUI là vô nghĩa khi bạn muốn tự động hóa mọi thứ.
biley
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.