Thay đổi thư mục làm việc


13

Tôi đang cố nén một thư mục tại

/home/cyrus/sql

Và tôi muốn thay đổi thư mục làm việc khi nén thư mục:

/ $ zip -b /home/cyrus sql.zip /home/cyrus/sql

Nhưng khi tôi kiểm tra tệp zip:

/ $ unzip -l sql.zip

Archive:  sql.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2013-05-30 10:59   home/cyrus/sql/
  1776642  2013-05-23 10:22   home/cyrus/sql/wordpress.sql
---------                     -------
  1776642                     2 files

Thư mục gốc nên có sql. Tôi đã làm gì sai?

Câu trả lời:


10

Từ man zip:

-b path

 --temp-path path

Sử dụng đường dẫn được chỉ định cho kho lưu trữ zip tạm thời. Ví dụ:

zip -b /tmp stuff *

sẽ đặt kho lưu trữ zip tạm thời trong thư mục / tmp, sao chép qua Stuff.zip vào thư mục hiện tại khi hoàn tất. Tùy chọn này hữu ích khi cập nhật kho lưu trữ hiện có và hệ thống tệp chứa kho lưu trữ cũ này không có đủ dung lượng để lưu trữ cả lưu trữ cũ và mới cùng một lúc. Nó cũng có thể hữu ích khi phát trực tuyến trong một số trường hợp để tránh sự cần thiết phải mô tả dữ liệu. Lưu ý rằng việc sử dụng tùy chọn này có thể yêu cầu zip mất thêm thời gian để sao chép tệp lưu trữ khi được thực hiện vào hệ thống tệp đích.

Theo mặc định ziplưu trữ đường dẫn đầy đủ liên quan đến thư mục hiện tại. Nếu bạn muốn zipfile của bạn có sqlthư mục của bạn là root, bạn sẽ cần chạy lệnh từ /home/cyrusthư mục.


14

Nếu bạn muốn zipnội dung của một thư mục nhất định và lưu trữ ziptệp trong thư mục hiện tại, bạn có thể viết nó:

(cd /some/dir && zip -r - dir-there) > file.zip

5

-bChỉ định nơi zipnên đặt các tệp tạm thời, không phải là nó sẽ thay đổi thư mục ở đâu đó. Từ man zip:

 -b path
      Use the specified path for the temporary  zip  archive.

Thử đi:

cd /home/cyrus && zip sql.zip sql

Hoặc cd /home/cyrus && zip /sql.zip sqlnếu bạn muốn tệp zip được tạo trong thư mục gốc.
tripleee

2

không chắc chắn nếu tôi hiểu điều này đúng nhưng -b sẽ không thay đổi thư mục gốc. Nó sẽ đặt kho lưu trữ zip tạm thời trong thư mục / home / cryus, sao chép qua sql.zip vào thư mục hiện tại khi hoàn tất. Tùy chọn này chỉ hữu ích khi cập nhật kho lưu trữ hiện có và hệ thống tệp chứa kho lưu trữ cũ này không có đủ dung lượng để lưu trữ cả lưu trữ cũ và mới cùng một lúc.

thử sử dụng:

-j Chỉ lưu tên tệp đã lưu (rác đường dẫn) và không lưu tên thư mục. Theo mặc định, zip sẽ lưu trữ đường dẫn đầy đủ (liên quan đến đường dẫn hiện tại).


1
-jcó thể không đúng; Tôi cho rằng OP muốn giữ các đường dẫn tương đối, không xóa tất cả các đường dẫn.
tripleee

2

Lấy cảm hứng từ câu trả lời của Stephane:

(cd /home/cyrus; zip -r sql.zip sql;)

Kết quả:

  1. bạn có một sql.zip trong / home / cyrus /
  2. sql.zip chứa thư mục sql / và tất cả nội dung của nó
  3. bạn NKT ban đầu không thay đổi

4
Làm thế nào là tốt hơn?
Stephen Rauch

0

Có thể dễ dàng hơn để liên kết thư mục bạn đang cố nén vào thư mục hiện tại. Bằng cách đó bạn có thể ở lại nơi bạn đang có.

ln -s /path/to/whatever .
zip -r myzip whatever

Họ rm các symlink nếu bạn mong muốn.

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.