Як стискати кілька файлів в архіві .xz?


Відповіді:


10

Хоча як це детально описано Zacharee1 та heemayl, це те, що ви хочете зробити, інший спосіб - передавати дані команди в команду:tar cJf archive files...xz

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

Оскільки Ubuntu tarпідтримує цю Jопцію, цей альтернативний спосіб особливо корисний, коли ви хочете передати варіанти xz.

У цьому прикладі я націлюю та xzip деякі файли TIFF з високим рівнем стиснення ( -9до xz) та багатослівного виведення ( vдо tar, -vдо 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

Це, звичайно, можна зробити також у два чітко окремі кроки:

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

Ці два способи фактично не є рівнозначними в тому, як вони діють, хоча .tar.xzфайли, які вони створюють, зрештою, повинні бути однаковими (і були, коли я тестував це).

  • У першому, вихід з tarIS конвеєр ( |) на вхід в xz. xzотримує дані tarмайже одразу, і жоден проміжний нестиснений файл tar не створюється. Це говорить про те, що перший спосіб, по суті , еквівалентно , щобtar cJf archive files... , за винятком додаткових аргументів , переданих за винятком xz.
  • У другій створюється нестиснений архів tar, який створюється першою командою, потім стискається xzу другій команді. ( xzавтоматично видаляє вихідний файл, коли це зроблено, якщо тільки не викликається з -k/ --keep.)

Для подальшого читання дивіться цю публікацію Рафаеля ван Хорна та програми tarта та вікна xz.


1
+ 1..це хороший, коли бажано вищий (або різний) коефіцієнт стиснення ..
heemayl

2
Привіт 2015! Інший спосіб, за допомогою якого можна досягти різних рівнів стиснення, tar -J- це вказати змінну середовища XZ_OPT, зробивши виклик приблизно таким чином:XZ_OPT="-9v" tar -Jcf out.tar.xz [files]
Wug

2
@Wug Це відмінна ідея. Мені здається, це вимагає своєї власної окремої відповіді. Чи готові ви це опублікувати?
Елія Каган

13

Використовувати tarз -Jопцією:

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

tar використовується для об'єднання декількох файлів в один (Архів), і тоді нам потрібно стиснути архів за допомогою алгоритму стиснення XZ.

Від 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

Також зауважте, що images.tar.xzбуде створено в поточному каталозі, якщо ви хочете зберегти його де-небудь ще /full/path/to/images.tar.xz.


почав процес xzing декількох величезних PSD, і якщо чесно, архів пропонує величезну компресію! 400 Мб + зараз 200 МБ
далека графіка

1
great..although xzє найповільнішим серед xz, gzip, bzip2з - за його більш високу ступінь стиснення , ніж others..the повільність варто мати справу з , якщо ви хочете більше стиснення ..
heemayl

Усього в моєму PSD, як, наприклад, 600-900 Мб xD
Дистанційна графіка

ви добре їхати ....
heemayl

якась помилка ._.
Дистанційна графіка

3

Використовуйте цю команду: tar cJf <archive.tar.xz> <files>. Відокремте шляхи до файлу з пробілом.


вам це потрібно:-cfJ
AB

1
@AB: вам не потрібно -в front..from man tar: A function letter need not be prefixed with ``-''..so tar cJfабсолютно нормально.
heemayl

@heemayl Але це, здається, не працює. Я спробував це без "-", але смола не завершена.
AB

@heemayl Це я подумав.
TheWanderer

1
Зауважте, що ви повинні дотримуватися своєї першої відповіді tar cJf, це дасть ОП інший спосіб зробити це, оскільки моя відповідь tar --cvJfспочатку вже висвітлена ..
heemayl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.