Tạo một kho lưu trữ với lệnh


11

Tôi phải tạo một kho lưu trữ bằng lệnh gzip (không phải tar - cần thiết) và kho lưu trữ phải chứa các tệp từ thư mục khác - ví dụ: / etc. Tôi đã cố gắng sử dụng lệnh

gzip myetc.gz /etc

Nhưng nó không hoạt động.


3
gzipkhông phải là zip. Chúng là những công cụ khác nhau hoạt động khác nhau.
roaima

3
gzipchỉ là máy nén dòng. Nó không biết về các tập tin hoặc thư mục.

3
Tại sao bạn không thể sử dụng tar?
marcelm

Nếu bạn không có tar, bạn có cpio không?
Rup

2
Bạn nói rằng bạn muốn tạo một kho lưu trữ, nhưng bạn không thể sử dụng tar. Bạn biết rằng một phần của từ "tar" xuất phát từ "ARchive". Ý tôi là, đó là lý do của nó. Ai hoặc cái gì muốn loại trừ "tar" khỏi quy trình tạo lưu trữ? Về cơ bản, bạn đang hỏi cách lái vít bằng búa (không phải tuốc nơ vít - điều đó là cần thiết).
Mike S

Câu trả lời:


6

Gzip chỉ hoạt động với một tệp duy nhất hoặc luồng - dữ liệu được chuyển sang gzip. Vì vậy, trước tiên bạn cần tạo một tệp, như với tar, và sau đó bạn có thể gzip nó. Tùy chọn khác là gzip tất cả các tệp riêng lẻ, sau đó tar vào một tệp.

Cả hai giải pháp này đều ngu ngốc và không nên sử dụng. Bạn nên sử dụng tar với tùy chọn nén tích hợp và thực hiện tất cả trong một lệnh.


1
Tại sao phương pháp đầu tiên nên ngu ngốc? Đây là cách thông thường để sản xuất .tar.gz...
rexkogitans

Vâng ngu ngốc có lẽ không phải là thuật ngữ đúng, nhưng thay vì sử dụng gzip, nếu bạn có thể sử dụng tar với tùy chọn c. Nó đơn giản hơn và tôi không tin đường ống tar đến gzip có lợi thế.
XUÂN

Gzip có thể hoạt động cho nhiều tệp với tùy chọn -r, nhưng sẽ tạo một .gz mới cho mỗi tệp trong thư mục.
Luciano Andress Martini

1
@rexkogitans - thật là ngu ngốc theo cùng một cách cat filename | grep blahngu ngốc. Nó cũng ít hơn nhiều so với tối ưu vì nó sẽ sử dụng một không gian tạm thời lớn. Tôi không biết nếu tôi gọi nó là ngu ngốc nhiều như không chính đáng, không tối ưu, và nói chung chỉ là loại xấu xí. Chà, làm việc ngu quá.
Mike S

Ồ, bây giờ tôi thấy những gì thật ngu ngốc. Không, `tar -czf` là cách để đi vì nó không liên quan đến một thứ vô dụng fork().
rexkogitans

12

gziplàm việc với các tập tin, không phải thư mục. Do đó, để tạo một kho lưu trữ của một thư mục bạn cần sử dụng tar(sẽ tạo một tarball duy nhất trong số nhiều tệp):

tar cvf myetc.tar /etc

hoặc, cho một kho lưu trữ được nén:

tar cvzf myetc.tar.gz /etc

2
nếu ai đó có hệ thống "cổ" không có tùy chọn "-z", họ có thể làm: cd / ; tar cf - ./etc | gzip -c - > myetc.tar.gz (nếu bạn đang thắc mắc tại sao tôi tar "./etc" thay vì "/ etc", thì đó là vì trên các hệ thống cũ đó, khi sử dụng tar xvf, nó sẽ xuất ra / etc và ghi đè lên nó ... [hoặc bạn phải sử dụng "pax" trong trường hợp đó]). Lệnh nghịch đảo, tức là trích xuất kho lưu trữ bên dưới "/ where": cd /somewhere ; gzip -dc < /the/location/of/myetc.tar.gz | tar xvf -
Olivier Dulac

1

Nếu bạn thực sự không có sẵn tar, bạn có thể sử dụng gzip để tạo bản sao lưu của thư mục bằng tùy chọn (-r - đệ quy), nhưng có lẽ đó không chính xác là những gì bạn đang mong đợi ...

Trước tiên, bạn sẽ cần sao chép thư mục của mình sang tên khác, nếu bạn muốn giữ thư mục gốc không thể chạm tới.

#cp -a directory my_gzip_alone_backup

Thứ hai, bạn sẽ nén tất cả các tệp trên thư mục theo cách đệ quy (-r).

#gzip -r my_gzip_alone_backup

Bây giờ chúng ta hãy xem bên trong bản sao lưu my-gzip-alone. Bạn sẽ không có một tệp myfile.gz như bạn mong đợi, nhưng rất nhiều tệp được nén theo cách đệ quy. Nhưng nó không tốt để làm điều đó với vv vì liên kết tượng trưng ...

Để giải nén thư mục, logic tương tự có thể được áp dụng với gunzip.

Một cách khác là chuyển đổi thư mục thành một tệp duy nhất, nếu bạn không có tar để làm điều đó, nhưng hãy sử dụng dd, như đã trình bày trong bài đăng này: https://askubfox.com/questions/626634/converting-a -file-to-thư mục

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.