我有一个令人尴尬的并行过程,该过程会创建大量几乎(但不是完全)相同的文件。有没有一种方法可以“即时”归档文件,以使数据不会消耗比所需更多的空间?
该进程本身接受命令行参数,并将创建的每个文件的名称打印到stdout。我正在调用它,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
读取参数的命令行前端)。