J'ai un processus parallèle embarrassant qui crée une énorme quantité de fichiers presque (mais pas complètement) identiques. Existe-t-il un moyen d'archiver les fichiers "à la volée", afin que les données ne consomment pas plus d'espace que nécessaire?
Le processus lui-même accepte les paramètres de ligne de commande et imprime le nom de chaque fichier créé sur stdout. Je l'invoque avec parallel --gnu
qui s'occupe de distribuer les entrées (qui proviennent d'un autre processus) et de collecter les sorties:
arg_generating_process | parallel --gnu my_process | magic_otf_compressor
EXEMPLE SIMPLE pour la première partie du tuyau dans bash
:
for ((f = 0; $f < 100000; f++)); do touch $f; echo $f; done
À quoi pourrait magic_otf_compressor
ressembler? Il est censé traiter chaque ligne d'entrée comme un nom de fichier, copier chaque fichier dans une .tar
archive compressée (la même archive pour tous les fichiers traités!), Puis la supprimer. (En fait, il devrait suffire d'imprimer le nom de chaque fichier traité, un autre | parallel --gnu rm
pourrait se charger de supprimer les fichiers.)
Existe-t-il un tel outil? Je ne pense pas à compresser chaque fichier individuellement, cela gaspillerait beaucoup trop d'espace. J'ai examiné archivemount
(gardera le système de fichiers en mémoire -> impossible, mes fichiers sont trop gros et trop nombreux) et avfs
( je n'ai pas pu le faire fonctionner avec FUSE). Qu'est-ce que j'ai raté?
Je ne suis qu'à un pas de pirater un tel outil moi-même, mais quelqu'un doit l'avoir fait avant ...
EDIT : Essentiellement, je pense que je cherche un frontal stdin pour libtar
(par opposition au frontal de ligne de commande tar
qui lit les arguments de, eh bien, la ligne de commande).