У меня смущающий параллельный процесс, который создает огромное количество почти (но не полностью) идентичных файлов. Есть ли способ архивировать файлы «на лету», чтобы данные не занимали больше места, чем необходимо?
Сам процесс принимает параметры командной строки и печатает имя каждого файла, созданного в стандартный вывод. Я вызываю его, parallel --gnu
который заботится о распределении входных данных (которые поступают из другого процесса) и сбора выходных данных:
arg_generating_process | parallel --gnu my_process | magic_otf_compressor
ПРОСТОЙ ПРИМЕР для первой части трубы в bash
:
for ((f = 0; $f < 100000; f++)); do touch $f; echo $f; done
Как может magic_otf_compressor
выглядеть? Предполагается, что каждая строка ввода рассматривается как имя файла, копирует каждый файл в сжатый .tar
архив (один и тот же архив для всех обработанных файлов!), А затем удаляет его. (На самом деле, этого должно быть достаточно, чтобы напечатать имя каждого обработанного файла, другой | parallel --gnu rm
может позаботиться об удалении файлов.)
Есть ли такой инструмент? Я не рассматриваю сжатие каждого файла по отдельности, это будет тратить слишком много места. Я изучил archivemount
(сохраню файловую систему в памяти -> невозможно, мои файлы слишком большие и слишком много) и avfs
(не смог заставить его работать вместе с FUSE). Что я пропустил?
Я всего в одном шаге от взлома такого инструмента сам, но кто-то должен был сделать это раньше ...
РЕДАКТИРОВАТЬ : По сути, я думаю, что я ищу внешний интерфейс stdin libtar
(в отличие от внешнего интерфейса командной строки, tar
который читает аргументы, ну, в общем, из командной строки).