Запись данных в zip-файл - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть скрипт, который я запускаю в терминале Ubuntu (Bash). В настоящее время я напрямую добавляю вывод скрипта в файл, используя следующую команду:

. / Run.sh> a.txt

Но для некоторых входных файлов run.sh может выдавать выходные данныекоторый большой по размеру без сжатия. Можно ли записать эти выходные данные непосредственно в zip-файл, не проходя через промежуточный файл дампа? Я знаю, что это возможно в Java и Python. Но я хотел использовать общий метод в bash, чтобы сохранить run.sh таким же, даже если моя работающая программа меняется.

Я пробовал искать в Интернете, но не нашел ничего полезного.

Ответы [ 3 ]

1 голос
/ 04 ноября 2019

Формат «zip» предназначен для архивирования. Программа 'zip' может взять существующий файл и поместить сжатую версию в архив. Например:

./run.sh > a.txt
zip a.zip a.txt

Тем не менее, вы задаете вопрос конкретно о «потоковом» решении (с учетом размера файла). Существует несколько утилит, которые используют форматы «потокового воспроизведения»: gz, bz2 и xz. Каждый преуспевает в различном типе данных, но во многих случаях все будет работать.

./run.sh | gzip > a.txt.gz
./run.sh | bzip2 > a.txt.bz2
./run.sh | xz > a.txt.xz

Если вы ищете самую широкую совместимость, gzip обычно ваш друг.

1 голос
/ 04 ноября 2019

В этом случае файл gzip будет более подходящим. В отличие от zip, который является форматом архива, gzip является просто форматом сжатых данных и может легко использоваться в канале:

./run.sh | gzip > a.txt.gz

Полученный файл можно распаковать на месте с помощью команды gunzip (в результатев файле a.txt), просмотренном с помощью zmore или указанном в zcat, что позволяет обрабатывать выходные данные с помощью фильтра без записи всего распакованного файла в любом месте.

0 голосов
/ 04 ноября 2019

В bash вы можете использовать процесс подстановки.

zip -FI -r file.zip <(./run.sh)
...