Thật kỳ lạ là không ai khác đã đề cập rằng các phiên bản GNU hiện đại tar
cho phép bạn nén khi bạn đang đóng gói:
tar -czf output.tar.gz directory1 ...
tar -cjf output.tar.bz2 directory2 ...
Bạn cũng có thể sử dụng trình nén mà bạn chọn, miễn là nó hỗ trợ các tùy chọn ' -c
' (sang stdout, hoặc từ stdin) và ' -d
' (giải nén):
tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...
Điều này sẽ cho phép bạn chỉ định bất kỳ máy nén thay thế nào.
[ Đã thêm : Nếu bạn đang giải nén từ gzip
hoặc bzip2
tệp nén, GNU sẽ tar
tự động phát hiện những tệp này và chạy chương trình thích hợp. Đó là, bạn có thể sử dụng:
tar -xf output.tar.gz
tar -xf output.tgz # A synonym for the .tar.gz extension
tar -xf output.tar.bz2
và những điều này sẽ được xử lý đúng cách. Nếu bạn sử dụng một máy nén không tiêu chuẩn, thì bạn cần phải xác định điều đó khi bạn thực hiện việc trích xuất.]
Lý do cho sự tách biệt, như trong câu trả lời đã chọn, sự tách biệt về nhiệm vụ. Trong số những thứ khác, điều đó có nghĩa là mọi người có thể sử dụng cpio
chương trình '' để đóng gói các tệp (thay vì tar
) và sau đó sử dụng máy nén được lựa chọn (ngày xưa, máy nén được ưa thích hơn pack
, sau này là compress
(hiệu quả hơn nhiều so với pack
), và sau gzip
đó chạy vòng quanh cả hai phiên bản tiền nhiệm và hoàn toàn cạnh tranh với zip
(đã được chuyển sang Unix, nhưng không có nguồn gốc ở đó), và bây giờ bzip2
, theo kinh nghiệm của tôi, thường có lợi thế hơn 10-20% gzip
.
[ Thêm : một người nào đó đã lưu ý trong câu trả lời của họ rằng cpio
có những quy ước buồn cười. Điều đó đúng, nhưng cho đến khi GNU tar
có các tùy chọn liên quan (' -T -
'), cpio
là lệnh tốt hơn khi bạn không muốn lưu trữ mọi thứ bên dưới một thư mục nhất định - bạn thực sự có thể chọn chính xác tệp nào đã được lưu trữ. Nhược điểm của cpio
nó là bạn không chỉ có thể chọn các tệp - bạn phải chọn chúng. Vẫn còn một nơi mà cpio
điểm số; nó có thể thực hiện sao chép tại chỗ từ hệ thống phân cấp thư mục này sang hệ thống phân cấp thư mục khác mà không cần bất kỳ bộ nhớ trung gian nào:
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
Ngẫu nhiên, -depth
tùy chọn bật ' ' find
rất quan trọng trong bối cảnh này - nó sao chép nội dung của các thư mục trước khi thiết lập quyền trên chính các thư mục đó. Khi tôi kiểm tra lệnh trước khi nhập phần bổ sung cho câu trả lời này, tôi đã sao chép một số thư mục chỉ đọc (quyền 555); khi tôi xóa bản sao, tôi phải nới lỏng quyền trên các thư mục trước khi ' rm -fr /new/place
' có thể hoàn tất. Nếu không có -depth
tùy chọn, cpio
lệnh sẽ không thành công. Tôi chỉ nhớ lại điều này khi tôi đi dọn dẹp - công thức được trích dẫn là tự động đối với tôi (chủ yếu là do lặp lại nhiều lần trong nhiều năm). ]