Ngoài câu trả lời @Lekensteyn, tôi muốn nói thêm rằng hành vi này dựa trên Làm một việc và thực hiện tốt triết lý - tarchương trình biết cách đặt nhiều tệp vào một luồng (có .tarphần mở rộng), gzipbiết cách nén tập tin duy nhất (thêm .gzphần mở rộng) *. Bằng cách kết hợp các công cụ đó, bạn có thể tạo một lệnh nén nhiều tệp thành một .tag.gztệp.
Cách tiếp cận này rất linh hoạt - bạn có thể kết hợp một vài lệnh Unix tiêu chuẩn để làm tất cả mọi thứ. Ví dụ: nếu bạn viết chương trình tốt hơn để nén các tệp bạn không cần sửa đổi tarđể cho phép nó tạo .tar.mymegaziptệp - thay vào đó, bạn chỉ cần tarđầu ra của đường ống đến máy nén của mình.
Tương tự, tarkhông biết gì về SSH, nhưng bằng cách kết hợp các lệnh, bạn có thể tạo một tập lệnh lưu trữ tệp, tải chúng lên một máy từ xa thông qua SSH và hủy lưu trữ chúng ở đó.
So sánh điều này với ziplệnh, vốn không bắt nguồn từ Unix - nó có các công cụ tích hợp để nén toàn bộ thư mục, mã hóa tệp, chia tệp lưu trữ thành các tệp zip nhỏ hơn, v.v.
(chú thích) - có, tarcó thể tự gzip hoặc bzip các tệp bằng cách sử dụng -zvà -jchuyển đổi, chúng được thêm vào để thuận tiện và GNU tar thực sự sinh sản gziphoặc bzip2là một quy trình mới.
tar c dir/ | gzip > dir.tar.gzvàtar czf dir.tar.gz dir/lệnh làm điều tương tự. Một ví dụtarđược kết hợp với SSH vàtar(một lần nữa):tar cz Documents/ | ssh user@host 'tar xz(tương đương rsync sẽ làrsync -a Documents user@host::)