LINUX.ORG.RU

Сжатие записываемого программой файла (не программирование)


0

0

Есть программа, которая пишет огромные текстовые файлы. Не соображу сообразить, как можно (если можно) «на лету» сжимать записываемый файл. Исходные коды программы менять не могу, только имя выходного файла.

Всю файловую систему мне сжимать не надо, а большинство советов в интернете именно об этом.

fuse-zip, вроде как единственная fuse-ориентированная файловая система с поддержкой записи в архив не подходит, поскольку держит записываемые файлы в RAM и сжимает только при размонтировании.

★★

LOR полезен хотя бы тем, что после написания сообщения, в голову сразу может прийти правильная мысль. Ключевое слово для моего вопроса - named pipe.

octy ★★
() автор топика

Нечто вроде такого (осторожно, башизм и линуксизм):

someprogram >(gzip > out1.txt.gz) >(gzip > out2.txt.gz)

При этом, баш создаст пайпы к соответствующим процессам, и в качестве имен файлов передаст программе /dev/fd/nnn, которые соответствуют открытым файловым дескрипторам процесса.

dmitry_vk ★★★
()
Ответ на: комментарий от anonomouso

gzip сам закроется, как только в named pipe будет передан символ конца файла (например, пишущая в named pipe программа выполнит fclose()).

Ну а проще всего не мудрствовать, а

$ mkfifo np
$ gzip -c < np > compressed.gz &
$ someprogram -o np

Можите сам проверить, в качесве someprogram

$ cat > np

Символ конца файла, как всем известно, Ctrl+D.

octy ★★
() автор топика
Ответ на: комментарий от octy

А что ты будешь делать, если программа программа закрывает файл, открывает его на добавление, снова закрывает и так несколько раз?

Lumi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.