Ho un processo imbarazzantemente parallelo che crea una quantità enorme di file quasi (ma non completamente) identici. C'è un modo per archiviare i file "al volo", in modo che i dati non consumino più spazio del necessario?
Il processo stesso accetta i parametri della riga di comando e stampa il nome di ciascun file creato su stdout. Lo sto invocando con il parallel --gnuquale si occupa di distribuire l'input (che proviene da un altro processo) e di raccogliere l'output:
arg_generating_process | parallel --gnu my_process | magic_otf_compressor
ESEMPIO SEMPLICE per la prima parte del tubo in bash:
for ((f = 0; $f < 100000; f++)); do touch $f; echo $f; done
Come potrebbe magic_otf_compressorapparire? Dovrebbe trattare ogni riga di input come nome file, copiare ogni file in un .tararchivio compresso (lo stesso archivio per tutti i file elaborati!) E quindi eliminarlo. (In realtà, dovrebbe essere sufficiente stampare il nome di ciascun file elaborato, un altro | parallel --gnu rmpotrebbe occuparsi di eliminare i file.)
Esiste un tale strumento? Non sto pensando di comprimere ogni file singolarmente, questo perderebbe troppo spazio. Ho esaminato archivemount(manterrà il file system in memoria -> impossibile, i miei file sono troppo grandi e troppi) e avfs(non riuscivo a farlo funzionare insieme a FUSE). Cosa mi sono perso?
Sono solo a un passo dall'hacking di un tale strumento, ma qualcuno deve averlo fatto prima ...
EDIT : Essenzialmente penso di essere alla ricerca di un front-end stdin per libtar(al contrario del front-end della riga di comando tarche legge gli argomenti, beh, dalla riga di comando).