Ho centinaia di file simili simili (30 megabyte ciascuno) che voglio comprimere. Ogni coppia di file ha il 99% degli stessi dati (meno dell'1% di differenza), quindi mi aspetto di non avere più di 40-50 megabyte di archivio.
Singolo file può essere compresso da 30 MB a 13-15 MB (con xz -1
, gz -1
, bzip2 -1
), ma quando comprimendo due o più file che voglio avere archivio con dimensioni 13-15MB + N*0.3MB
dove N è il numero di file.
Quando uso tar
(per creare un archivio solido) e xz -6
(per definire un dizionario di compressione più grande di un file - Aggiornamento - questo non era abbastanza! ), Ho ancora un archivio con dimensioni N*13MB
.
Penso che entrambi gzip
e bzip2
non mi aiuteranno perché hanno un dizionario inferiore a 1 MB e il mio flusso tar ha ripetizioni ogni 30 MB.
Come posso archiviare il mio problema in Linux moderno usando strumenti standard?
È possibile sintonizzarsi xz
per comprimere velocemente, ma utilizzare un dizionario più grande di 30-60 MB?
Aggiornamento : ha fatto il trucco con tar c input_directory | xz --lzma2=dict=128M,mode=fast,mf=hc4 --memory=2G > compressed.tar.xz
. Non sono sicuro del necessario mf=hc4
e delle --memory=2G
opzioni; ma dict=128M
imposta il dizionario in modo che sia sufficientemente grande (più grande di un file) e mode=fast
rendi il processo un po 'più veloce di -e
.
xz -1 --memory=2G
non ha aiutato, testato su 2 e 4 file dal set.