Câu trả lời:
Sử dụng -J
tù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 -cf
trái ngược với tar cf
), thì -f
tù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>
f
cuối cùng, ngay cả khi không có dấu gạch ngang.
tar
trên macOS dường như hỗ trợ -J
như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 -J
chỉ 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ừ xz
vào tar.xz
tập tin.
-f
khô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 -T0
hoặc -0 -T0
dướ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 -6
chậ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 f
tù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 -z
tùy chọn cho xz
, vì đó là mặc định.
Nó hoạt động với gzip
và bzip2
quá:
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ó tar
lư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 xz
hoặc nếu bạn đang sử dụng tar
trên MacOS, có lẽ bạn muốn tránh tar -cJf
cú 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 -4e
các cuộc gọi xz
với -4e
tù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
để --keep
file gốc và -9
cho nén thực sự nặng. -z
để đặt thủ công thành xz
zip, 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 -dc
thay 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 -d
hoặc --decompress
thay vì unxz
là 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 -cJf
cú 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.J
tù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.
v
và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ữ.