Làm cách nào để nén nhiều tệp vào tệp lưu trữ .xz?


10

Tôi muốn nén một số hình ảnh vào một kho lưu trữ .xz. Làm thế nào để làm điều đó?

Câu trả lời:


10

Mặc dù như chi tiết của Zacharee1bởi heemayl thường là những gì bạn sẽ muốn làm, một cách khác là chuyển dữ liệu được tarred vào lệnh:tar cJf archive files...xz

tar c files... | xz > archive.tar.xz

Vì Ubuntu tarhỗ trợ Jtùy chọn, cách thay thế này đặc biệt hữu ích khi bạn muốn chuyển các tùy chọn sang xz.

Trong ví dụ này, tôi tar và xzip một số tệp TIFF với mức độ nén ( -9to xz) và đầu ra dài ( vto tar, -vto xz):

ek@Io:~/Pictures$ tar vc *.tif{,f} | xz -9v > pics.tar.xz
page001.tif
page002.tif
page003.tif
page004.tif
page9087.tif
page3la.tiff
quux0000.tiff
  100 %       207.3 KiB / 290.0 KiB = 0.715

Tất nhiên, điều này cũng có thể được thực hiện theo hai bước riêng biệt rõ ràng:

ek@Io:~/Pictures$ tar vcf pics.tar *.tif{,f}
page001.tif
page002.tif
page003.tif
page004.tif
page9087.tif
page3la.tiff
quux0000.tiff
ek@Io:~/Pictures$ xz -9v pics.tar
pics.tar (1/1)
  100 %       207.3 KiB / 290.0 KiB = 0.715

Hai cách đó không thực sự tương đương trong cách chúng hoạt động, mặc dù các .tar.xztệp chúng tạo ra cuối cùng phải giống nhau (và, khi tôi kiểm tra nó).

  • Trong đầu tiên, đầu ra của tarđược đường ống ( |) đến đầu vào của xz. xznhận dữ liệu từ targần như ngay lập tức và không có tệp tar không nén trung gian nào được tạo. Điều này có nghĩa là cách đầu tiên về cơ bản tương đương vớitar cJf archive files... , ngoại trừ các đối số bổ sung được truyền vào xz.
  • Trong lần thứ hai, một kho lưu trữ tar không nén được tạo bởi lệnh đầu tiên, sau đó được nén bởi xztrong lệnh thứ hai. ( xztự động xóa tệp gốc khi hoàn tất, trừ khi được gọi bằng -k/ --keep.)

Để đọc thêm, xem bài này Rafael van Horntarxztrang man.


1
+ 1. đây là một điều tốt khi tỷ lệ nén cao hơn (hoặc thay đổi) được mong muốn ..
heemayl

2
Xin chào năm 2015! Một cách khác để bạn có thể thực hiện các mức nén khác nhau bằng cách sử dụng tar -Jlà chỉ định biến môi trường XZ_OPT, thực hiện lệnh gọi giống như:XZ_OPT="-9v" tar -Jcf out.tar.xz [files]
Wug

2
@Wug Đó là một ý tưởng tuyệt vời. Dường như với tôi rằng nó đảm bảo câu trả lời riêng của nó. Bạn có sẵn sàng để đăng nó?
Eliah Kagan

13

Sử dụng tarvới -Jtùy chọn:

tar -cvJf images.tar.xz /directory/containing/images/*

tar được sử dụng để kết hợp nhiều tệp thành một (Lưu trữ) và sau đó chúng ta cần nén tệp lưu trữ bằng thuật toán nén XZ.

Từ man tar:

-c, --create
       create a new archive
-v, --verbose
       verbosely list files processed
-J, --xz

-f, --file ARCHIVE
       use archive file or device ARCHIVE

Cũng lưu ý rằng images.tar.xzsẽ được tạo trong thư mục hiện tại, nếu bạn muốn lưu nó ở nơi khác sử dụng /full/path/to/images.tar.xz.


đã bắt đầu quá trình xé nát một số PSD khổng lồ và thành thật mà nói, kho lưu trữ đang cung cấp một số nén khổng lồ! 400 MB + hiện là 200 MB
Đồ họa xa xôi

1
great..although xzlà chậm nhất trong số xz, gzip, bzip2do tỉ lệ nén cao hơn của nó so với sự chậm chạp others..the là giá trị để thỏa thuận với nếu bạn muốn nén nhiều ..
heemayl

Tổng số psds của tôi là, ví dụ, tổng cộng 600-900 MB xD
Đồ họa xa xôi

bạn tốt để đi ....
heemayl

một số lỗi ._.
Đồ họa xa xôi

3

Sử dụng lệnh này : tar cJf <archive.tar.xz> <files>. Đường dẫn tệp riêng biệt với một khoảng trắng.


bạn cần điều này:-cfJ
AB

1
@AB: bạn không cần -ở phía trước..từ man tar: A function letter need not be prefixed with ``-''.. tar cJfhoàn toàn ổn.
heemayl

@heemayl Nhưng có vẻ như nó không hoạt động. Tôi đã thử nó mà không có '-', nhưng tar vẫn chưa hoàn thành.
AB

@heemayl Đó là những gì tôi nghĩ.
TheWanderer

1
Lưu ý rằng bạn nên kiên trì với câu trả lời đầu tiên của mình tar cJf, điều đó sẽ cho OP một cách khác để làm điều này vì câu trả lời của tôi đã được đề cập tar --cvJflúc đầu ..
heemayl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.