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ý - tar
chương trình biết cách đặt nhiều tệp vào một luồng (có .tar
phần mở rộng), gzip
biết cách nén tập tin duy nhất (thêm .gz
phầ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.gz
tệ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.mymegazip
tệ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ự, tar
khô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 zip
lệ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ó, tar
có thể tự gzip hoặc bzip các tệp bằng cách sử dụng -z
và -j
chuyển đổi, chúng được thêm vào để thuận tiện và GNU tar thực sự sinh sản gzip
hoặc bzip2
là một quy trình mới.
tar c dir/ | gzip > dir.tar.gz
và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:
:)