Tengo un proceso embarazosamente paralelo que crea una gran cantidad de archivos casi (pero no completamente) idénticos. ¿Hay alguna manera de archivar los archivos "sobre la marcha", para que los datos no consuman más espacio del necesario?
El proceso en sí mismo acepta parámetros de línea de comandos e imprime el nombre de cada archivo creado para stdout. Lo invoco con el parallel --gnu
que se encarga de distribuir la entrada (que proviene de otro proceso) y recopilar la salida:
arg_generating_process | parallel --gnu my_process | magic_otf_compressor
EJEMPLO SIMPLE para la primera parte de la tubería en bash
:
for ((f = 0; $f < 100000; f++)); do touch $f; echo $f; done
¿Cómo podría magic_otf_compressor
verse? Se supone que debe tratar cada línea de entrada como nombre de archivo, copiar cada archivo a un .tar
archivo comprimido (¡el mismo archivo para todos los archivos procesados!) Y luego eliminarlo. (En realidad, debería ser suficiente para imprimir el nombre de cada archivo procesado, otro | parallel --gnu rm
podría encargarse de eliminar los archivos).
¿Existe alguna herramienta de este tipo? No estoy considerando comprimir cada archivo individualmente, esto desperdiciaría demasiado espacio. He investigado archivemount
(mantendrá el sistema de archivos en la memoria -> imposible, mis archivos son demasiado grandes y demasiados) y avfs
(no pude hacer que funcione junto con FUSE). ¿Qué me he perdido?
Estoy a un paso de hackear una herramienta así, pero alguien debe haberlo hecho antes ...
EDITAR : Básicamente creo que estoy buscando un front-end stdin para libtar
(a diferencia del front-end de la línea de comandos tar
que lee argumentos de, bueno, la línea de comandos).