Трубопровод выводится на молнию смолы после cspilt - PullRequest
0 голосов
/ 04 января 2019

Итак, у меня следующая ситуация:

Код, который создает большой (должен быть заархивирован) набор выводов следующим образом:

line00
line01
...
line0N
.
line10
line11
...
line1M
.
...

Я создаю этот контент и архивирую его:

./my_cmd | gzip -9 > output.gz

В псевдокоде я хотел бы сделать следующее:

./my_cmd \
| csplit --prefix=foo '/^\.$/+1' {*} \  # <-- this will just create files
| tar -zf ??? \                 # <-- don't know how to link files to tar
| gzip -9 > output.tar.gz

В идеале на жестком диске не должно быть никаких разархивированных файлов.

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

Если я не могу сделать это с помощью tar / gzip / csplit, то может быть что-то еще?

1 Ответ

0 голосов
/ 05 января 2019

Tar может справиться со сжатием самостоятельно.

./my_cmd | csplit --prefix=foo - '/^\.$/+1' {*} ; # writes foo?? files 

printf "%s\n" foo[0-9][0-9] | tar czf output.tar.gz -T -
rm -f foo[0-9][0-9]  # clean up the temps     

Если это не достаточно хорошо, и вам ДЕЙСТВИТЕЛЬНО нужно это -9 сжатие,

printf "%s\n" foo[0-9][0-9] | 
    tar cOT -               |
    gzip -9 > output.tar.gz

Тогда вы сможете извлечь отдельные файлы из архива для индивидуальной обработки.

tar xvOf tst.tgz foo00 | wc -l

Это позволяет сохранять сжатый файл, но извлекать фрагменты для работы без записи их на диск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...