Compressez les fichiers zip avec une compression plus élevée

10

J'ai un grand nombre de fichiers zip qui ont été compressés à l'aide de la commande zip. Je voudrais les recompresser avec le drapeau -9 pour améliorer le taux de compression. Est-ce que quelqu'un sait si cela peut être fait sans décompresser manuellement, puis compresser.

PS. Je dois les conserver sous forme de fichiers zip car ils sont servis aux utilisateurs de Windows (et en tant que tels, ont des espaces blancs dans leurs noms)

Smartelf
la source
la recompression n'est possible qu'en décompressant le fichier et en compressant à nouveau. il dépend de l'algorithme. Vous pouvez également essayer bzip2 ou encore mieux xz.
Astuce: cela peut également être fait avec des fichiers Excel XLSX ou XLSM car ce sont en fait des fichiers ZIP contenant des XML et d'autres éléments.
Cristian Ciupitu

Réponses:

10

Vous ne pouvez pas améliorer le taux de compression sans décompresser les données. Vous n'avez pas besoin d'extraire tous les fichiers zip avant de les compresser, mais je recommanderais de décompresser un fichier zip entier avant de recompresser.

Il est possible de recompresser les fichiers dans un fichier zip un à la fois et de les rajouter avant de passer au fichier suivant contenu dans le fichier zip. Cela nécessite N réécritures du fichier zip pour un fichier zip contenant N fichiers. Il est beaucoup plus efficace d'extraire les fichiers N et de générer le nouveau fichier zip en une seule fois, en compressant tous les fichiers avec -9.

Anthon
la source
1
Mon objectif n'est pas d'éviter la décompression, mais plutôt de conserver la même structure d'archive. et de ne modifier aucune métadonnée de fichier.
Smartelf
1
@Smartelf Je ne pense pas que vous puissiez éviter la décompression. Vos autres exigences sont possibles, il n'y a aucune raison pour que les données soient modifiées.
terdon
2
@Smartelf comme je l'ai déjà indiqué, vous ** devez ** recompresser. L'affectation des mêmes métadonnées de fichier ne devrait pas être un problème si vous le faites par exemple avec un programme Python et son module zip. Avec unzip/ zipconserver les métadonnées, la même chose est probablement plus difficile.
Anthon
6

Il existe un utilitaire appelé AdvanceCOMP qui fait exactement ce que vous recherchez. Il recompresse les fichiers ZIP et GZ (et quelques autres) sans extraction intermédiaire sur le disque. (Je crois que le mécanisme utilisé est de décompresser les données et de les recompresser, mais cela ne nécessite pas d'écrire des fichiers sur le disque ou de régénérer des métadonnées.)

gaelicWizard
la source