Я хотел бы создать архив tar gzip, но делайте это в порядке, обратном тому, что обычно делается: файлы в архиве должны быть сжаты индивидуально, а не весь архив: таким образом, он сохраняет искомое свойство, которое должно иметь. Это имеет для меня гораздо больше смысла, и я не знаю, почему это не было одобрено.
У меня есть несколько идей о том, как это сделать:
- используйте инструмент архивации со сжатием, такой как 7zip
- напишите мой собственный скрипт для этого, сначала сжав файлы, а затем загрузив их в tar (уже найден удобный скрипт Python для написания файла tar, и библиотека Python gzip кажется простой в использовании.
Тем не менее, в идеале, я хотел бы продолжать использовать tar для этого, поскольку это знакомый, де-факто инструмент для архивирования, где я работаю. У tar есть ключ --to-command
, который позволяет передавать извлеченные файлы в программу. Если бы у меня была симметричная команда, такая как --from-command
я бы легко реализовал свое желание с помощью:
tar cf my_archive.tar file1 file2 --from-command=gzip
tar xf my_archive.tar --to-command=gunzip
Моя мотивация исходит от работы с архивами, содержащими большое количество больших файлов. Я в настоящее время tar-gzip их, но затем извлечение любых файлов из архива занимает много времени - он должен быть распакован, прежде чем tar сможет получить доступ к файлу, и это происходит в последовательном порядке!
Итак, вот мои вопросы:
- Есть ли очевидный способ добиться этого, который я игнорирую?
- Кто-нибудь уже написал инструмент для работы, особенно с
tar
? - Если бы вы назвали
tar
иgzip
и стандартные методы архивирования и сжатия в Linux, то каким был бы эквивалентный, популярный метод архивации с сжатием в порядке, о котором я упоминал (то есть, неtar.gz
) - Есть ли другой способ, который я упускаю, чтобы обойти большое количество времени, которое требуется для извлечения файла из большого архива tar-gzip?
Спасибо!
РЕДАКТИРОВАТЬ
Я понимаю, что мне нужно перефразировать и уточнить мой вопрос. Тем более что, как отметил Робин Гуд, существуют довольно простые решения для создания сжатых архивов (а именно, zip
). Итак, вот оно:
Есть ли способ использовать tar
который обеспечивает истинный произвольный доступ к архиву, сохраняя его сжатым? Если нет, есть ли другое tar
замещение для Linux (которое построено с тем же обоснованием и, в идеале, с поддержкой тех же параметров командной строки), которое достигает этого?
Прямо сейчас я могу заменить tar
в общем смысле на zip
, изменив:
tar c path/to/file1 path/to/file2 | gzip > arc.tar.gz
gunzip < arc.tar.gz | tar x
чтобы:
zip -qr - path/to/file1 path/to/file2 > arc.zip
unzip -qoX test.zip
Однако это имеет тот недостаток, что он не поддерживает все параметры, которые tar
использует для архивирования, а именно:
- конвейерная передача каждого извлеченного файла по отдельности в конвейер (ключ
--to-command
) unzip
не принимает архив при стандартном вводе.funzip
, однако, - он выводит только первый файл в архиве
Так что это довольно ограниченно.
Еще раз спасибо!