Как сжать несколько файлов в архив .xz?

10

Я хочу сжать несколько изображений в архив .xz. Как я могу это сделать?

Отдаленная графика
источник

Ответы:

10

Хотя, как подробно описано в Zacharee1 и heemayl, это то, что вам нужно, другой способ - передать данные tar в команду:tar cJf archive files...xz

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

Поскольку Ubuntu tarподдерживает эту Jопцию, этот альтернативный способ особенно полезен, когда вы хотите передать опции xz.

В этом примере я tar и 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.

heemayl
источник
запустил процесс xzing нескольких огромных PSD и, честно говоря, архив предлагает огромное сжатие! 400 МБ + теперь 200 МБ
Отдаленная Графика
1
great..although xzявляется самым медленным среди xz, gzip, bzip2из - за его более высокую степень сжатия , чем others..the медлительность стоит иметь дело с , если вы хотите больше сжатия ..
heemayl
Все мои psds составляют около 600-900 МБ xD
Удаленная графика
Вы готовы идти ....
Heemayl
какая-то ошибка ._.
Удаленная графика
3

Используйте эту команду: tar cJf <archive.tar.xz> <files>. Отдельные пути к файлам с пробелом.

Странник
источник
вам нужно это:-cfJ
AB
1
@AB: вам не нужно -впереди .. из man tar: A function letter need not be prefixed with ``-''.. так что tar cJfвсе в порядке.
Heemayl
@heemayl Но, похоже, это не работает. Я пробовал без '-', но tar не завершен.
AB
@heemayl Я так и думал.
TheWanderer
1
Обратите внимание, что вы должны придерживаться своего первого ответа tar cJf, который даст OP другой способ сделать это, так как мой ответ уже tar --cvJf
описан