Câu trả lời:
Sử dụng -Jtùy chọn nén cho xz. Và nhớ man tar:)
tar cfJ <archive.tar.xz> <files>
Chỉnh sửa 2015-08-10:
Nếu bạn chuyển các đối số sang tar dấu gạch ngang (ví dụ: tar -cftrái ngược với tar cf), thì -ftùy chọn phải đến sau cùng , vì nó chỉ định tên tệp (cảm ơn @ABB vì đã chỉ ra điều đó!). Trong trường hợp đó, lệnh trông giống như:
tar -cJf <archive.tar.xz> <files>
fcuối cùng, ngay cả khi không có dấu gạch ngang.
tartrên macOS dường như hỗ trợ -Jnhưng tính năng này không được cung cấp trong trang man. Phải tìm nó ở đây. Mặc dù họ có đề cập đến XZ trong phần trên --options...
Switch -Jchỉ hoạt động trên các hệ thống mới hơn. Lệnh phổ quát là:
Để thực hiện lưu trữ .tar.xz
tar cf - directory/ | xz -z - > directory.tar.xz
Giải trình
tar cf - directoryđọc thư mục / và bắt đầu đặt nó ở định dạng TAR. Đầu ra của hoạt động này được tạo ra trên đầu ra tiêu chuẩn.
| ống đầu ra tiêu chuẩn đến đầu vào của một chương trình khác ...
... Điều đó xảy ra xz -z -. XZ được cấu hình để nén ( -z) lưu trữ từ đầu vào tiêu chuẩn ( -).
Bạn chuyển hướng đầu ra từ xzvào tar.xztập tin.
-fkhông có nghĩa là "từ tập tin" khi được chuyển đến xz. Thay vào đó, nó là viết tắt của --force(xem xz (1) để biết chi tiết) và tốt nhất là không được sử dụng trừ khi cần thiết.
tar cf - directory/ | xz -z -T0 - > directory.tar.xz
-1 -T0hoặc -0 -T0dưới dạng tùy chọn, thông thường sẽ vẫn cung cấp cho bạn một tệp nhỏ hơn gzip trong thời gian tương đương hoặc nhanh hơn, trong khi mặc định -6chậm hơn đáng kể hơn gzip.
Nếu bạn thích chế độ đường ống, đây là giải pháp sạch nhất:
tar c some-dir | xz > some-dir.tar.xz
Không cần thiết phải đặt ftùy chọn để xử lý tệp và sau đó sử dụng -để chỉ định rằng tệp là đầu vào tiêu chuẩn. Cũng không cần thiết phải chỉ định -ztùy chọn cho xz, vì đó là mặc định.
Nó hoạt động với gzipvà bzip2quá:
tar c some-dir | gzip > some-dir.tar.gz
hoặc là
tar c some-dir | bzip2 > some-dir.tar.bz2
Việc giải nén cũng khá đơn giản:
xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x
Nếu bạn chỉ có tarlưu trữ, bạn có thể sử dụng cat:
cat archive.tar | tar x
Nếu bạn chỉ cần liệt kê các tập tin, sử dụng tar t.
Nếu bạn muốn sử dụng các tùy chọn nén cho xzhoặc nếu bạn đang sử dụng tartrên MacOS, có lẽ bạn muốn tránh tar -cJfcú pháp.
Theo man xz, cách để làm điều này là:
tar cf - baz | xz -4e > baz.tar.xz
Bởi vì tôi thích định dạng của Wojciech Adam Koszek , nhưng không phải thông tin:
c tạo một kho lưu trữ mới cho các tập tin được chỉ định. fđọc từ một thư mục (tốt nhất để đặt thứ hai này vì -cf! = -fc)- đầu ra cho đầu ra tiêu chuẩn| đầu ra ống cho lệnh tiếp theoxz -4ecác cuộc gọi xzvới -4etùy chọn nén. (bằng -4 --extreme)> baz.tar.xz chỉ đạo tập tin tarred và nén đến baz.tar.xz ở đâu -4e, sử dụng các tùy chọn nén của riêng bạn. Tôi thường sử dụng -kđể --keepfile gốc và -9cho nén thực sự nặng. -zđể đặt thủ công thành xzzip, mặc dù nó mặc định là nén nếu không được hướng dẫn khác.
Để lặp lại Rafael van Horn , giải nén & cởi trói (xem ghi chú bên dưới):
xz -dc baz.tar.xz | tar x
Lưu ý: không giống như câu trả lời của Rafael , hãy sử dụng xz -dcthay vì catxz. Các tài liệu khuyến nghị điều này trong trường hợp bạn đang sử dụng điều này cho kịch bản. Tốt nhất nên có thói quen sử dụng -dhoặc --decompressthay vì unxzlà tốt. Tuy nhiên, nếu bạn phải, sử dụng các lệnh từ dòng lệnh là tốt.
tar -cJfcú pháp trên MacOS? Chỉ tò mò, bởi vì tôi vừa mới làm điều đó và nó dường như đang hoạt động.
Thử cái này: tar -cf file.tar file-to-compress ; xz -z file.tar
Ghi chú:
| vì điều này chạy các lệnh đồng thời. Sử dụng ;hoặc &thực thi các lệnh lần lượt.Jtùy chọn nào, nhưng cách này hiệu quả. Tôi nghĩ rằng bạn cần RHEL6.
tar -c file-to-compress | xz -z > file.tar.xz.
&sẽ không khởi chạy lệnh lần lượt. Thay vào đó, nó sẽ khởi chạy cái đầu tiên như một quá trình nền.
vvào lệnh switch (tar -cJvf) để dài dòng cho thấy các tệp được thêm vào kho lưu trữ.