Lệnh 'gzip' một thư mục?


66

Tôi chưa quen với công cụ nhắc lệnh Mac. Làm thế nào để bạn tạo một gzip của một thư mục trong Mac OS X? Tôi đã được một vài người nói rằng nếu bạn muốn tạo một gzip của một thư mục, bạn nên 'tar' nó trước và sau đó 'gzip' nó. Điều này có đúng không?


1
Đây không phải là một câu hỏi lập trình? Bài viết của bạn được gắn thẻ objective-cnhưng bạn đang hỏi về dòng lệnh.
rakuo15

Câu trả lời:


130

Tar là công cụ lưu trữ và gzip là công cụ nén. Để nén một thư mục đầy đủ, trước tiên bạn cần lưu trữ nó vào một tệp duy nhất. Đó là những gì công việc là tar. và sau đó bạn nén tệp lưu trữ. Bạn có thể thực hiện cả hai tác vụ trong một lệnh tar duy nhất với tùy chọn thích hợp.

tar -czf thư mục_name.tar.gz thư mục_name /

Nếu bạn không muốn tạo một kho lưu trữ tar (có thể bạn chỉ muốn nén một tệp duy nhất), thì bạn có thể sử dụng lệnh gzip trực tiếp.

tập tin gzip

Nó sẽ tạo một tệp nén có tên file.txt.gz


30
Điều đáng nói là các tùy chọn -czfsau tarlà gì: cbiểu thị rằng bạn muốn tạo một kho lưu trữ tar, záp dụng gziptrên kho lưu trữ tar trung gian và fdành cho tên tệp cuối cùng tiếp theo folder_name.tar.gz.
fideli

13
Cảnh báo: gzip file.txtthay thế tệp gốc.
Zoltán

6
@ Zoltán Sử dụng gzip -k file.txtđể "giữ" (không xóa) tệp đầu vào.
thohl

13

Nếu ai đó vẫn đang tìm thấy câu hỏi này khi tìm kiếm "gzip trong Mac", tôi đã viết một hướng dẫn rằng nó có thể hữu ích cho người khác. Nó đi từ đây:

Nén

Lệnh cơ bản nhất sẽ nén tệp filename.extvà sau đó thay thế nó filename.ext.gztrong cùng thư mục.

gzip filename.ext

Nếu bạn không muốn mất tệp gốc của mình, thì bạn cần chuyển đầu ra của gzip -ctệp.

gzip -c filename.ext > anotherfile.gz

Chúng tôi cũng có thể nén từ đầu vào tiêu chuẩn, vì vậy chúng tôi có thể nén đầu ra của các lệnh khác.

cat filename.ext | gzip > anotherfile.gz

OS X cũng đi kèm với các lệnh compressuncompress. Họ tạo ra một gzip "thông minh hơn", vì nó không nén tệp nếu nó phát triển sau quá trình nén. Lệnh sau thay thế filename.extvới filename.ext.Ztrong cùng thư mục.

compress filename.ext

Giải nén

Để khôi phục tệp về trạng thái tự nhiên không nén, bạn có thể sử dụng gzip hoặc các trình bao bọc khác. Chế độ giải nén của gzip được gọi với -dcờ. Chế độ này sẽ thay thế các tập tin filename.ext.gzvới filename.exttrong cùng thư mục. Cũng có một phím tắt được gọi là gunzipsẽ làm tương tự.

gzip -d filename.ext.gz
gunzip filename.ext.gz

Chúng ta cũng có thể dẫn tập tin giải nén vào đầu ra tiêu chuẩn để lưu nó vào tập tin khác.

gzip -cd filename.ext.gz > anotherfile
gunzip -c filename.ext.gz > anotherfile

Một cách nhanh chóng khác để đọc nội dung của một gzip đến đầu ra tiêu chuẩn là zcat, về cơ bản giống như gọi gzip -cdnhưng bạn có thể gọi nhiều tệp và nối chúng giống như catlệnh nối các tệp văn bản. Hạn chế duy nhất là các tệp của bạn cần được hậu tố với .Zhậu tố để nó hoạt động ...

zcat filename.ext.Z
zcat file_a.Z file_b.Z file_c.Z

Nhưng đừng sợ! zcatNó vẫn hữu ích, bởi vì nó có thể giải nén từ đầu ra tiêu chuẩn. Vì vậy, về cơ bản bạn có thể dẫn các tệp của bạn đến zcat để giải nén chúng trên cửa sổ terminal.

cat filename.ext.gz | zcat

Điều này rất hữu ích nếu bạn cần kiểm tra nội dung của tệp thật nhanh và thậm chí bạn có thể lưu đầu ra của zcat vào một tệp, thật dễ dàng.

cat filename.ext.gz | zcat > anotherfile

Trình uncompressbao bọc hoạt động như thế gzip -cdnhưng nó tìm các tệp có phần mở rộng .Z để thay thế chúng trong thư mục hiện tại, vì vậy bạn chỉ cần chỉ định tên tệp bạn muốn khôi phục, nhưng không sao nếu bạn gọi nó bằng phần mở rộng .Z, như chương trình sẽ bỏ qua nó.

compress filename.ext
uncompress filename.ext

Tôi hy vọng bạn tìm thấy hướng dẫn của tôi hữu ích :)


4

MacOS X là Unix nên nó sẽ hoạt động (công việc này trên GNU / Linux)

thư mục tar czvf nén.tar.gz

3

Vâng, bạn đã làm tar thư mục đầu tiên. Lệnh tar có thể làm cả hai:

tar -czf archiv.tar.gz mydir/

trích xuất lưu trữ của bạn:

tar -xzf archiv.tar.gz

3

Để thêm vào câu trả lời của @taskinoor: nếu bạn sử dụng phiên bản tệp duy nhất, aka

gzip file.txt

lưu ý rằng tệp gốc (file.txt) sẽ bị xóa và bạn sẽ chỉ có file.txt.gz

Tôi sẽ đặt điều này dưới dạng nhận xét nhưng không có đủ nghiệp lực để làm điều đó: =)


1
gzip --keep file.txtsẽ giữ bản gốc và tạo file.txt.gz. Xem gzip --help.
Blaise

1

Vâng cái này đúng rồi. gzipchỉ có thể nén một tập tin. tarmã hóa nội dung thư mục thành một file duy nhất, mà có thể được nén hơn nữa sử dụng gzip, bzip2, lzmahoặc bất cứ điều gì khá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.