Je veux pouvoir compresser un fichier sans perte, et si le fichier d'origine est identique au fichier d'un autre utilisateur, je veux que nos deux fichiers compressés correspondent, même si les dates du fichier d'origine sont différentes .
Je souhaite utiliser un maximum de 1 Go de RAM lors de la compression. Je penche vers un algorithme asymétrique car les fichiers que j'ai sont assez volumineux, et ils prennent au moins une heure à compresser avec LZMA1 "ultra" en 7-zip sur une machine P4 avec 1 Go de RAM et rien d'autre en cours d'exécution. Je pense que 7-zip et FreeARC peuvent être utilisés à mes fins. J'ai essayé de trouver les commandes que je devrais utiliser, mais je n'ai pas beaucoup de chance.
edit : des fichiers 100% identiques doivent être produits, même si les dates de création sont différentes. Cela devrait être possible via --nodates dans Freearc, et avec ???? en 7 zip. Je recherche une commande équivalente pour 7-zip et un moyen de normaliser la compression sur plusieurs ordinateurs.
Réponses:
Créez quelques fichiers identiques:
les gzip ...
observer le champ d'horodatage comme la seule différence:
Pour plus d'informations sur l'horodatage, consultez le RFC
Maintenant, vous pouvez soit prendre un MD5 qui commence après l'octet 8, mettre à zéro ces quatre octets dans vos fichiers et perdre leurs horodatages, ou extraire le CRC16 de ces gzips (voir également le RFC pour savoir comment extraire cela)
Ou, vous pouvez enregistrer sans horodatage:
la source
gzip
n'est disponible pour Windows, Cygwin le fournit.Pas une réponse directe à votre question, mais cela pourrait être utile de toute façon.
Il y a longtemps (un autre millénaire), j'ai eu le même problème. Nous voulions savoir si les fichiers compressés étaient les mêmes sans les décompresser et les comparer.
Notre solution était d'obtenir une somme md5 du fichier avant de le compresser, puis nous avons compressé le fichier et l'avons renommé
md5sum.zip
(.zip ou .tar.gz ou .rar ou .wimporte) . De cette façon, nous savions que si deux fichiers avaient le même nom (sans suffixe), ils étaient identiques.la source
pristine-tar a une version piratée de gzip qui produit toujours les mêmes résultats (et une autre pour bzip2). Choisissez une variante d'algorithme et un horodatage et vous êtes prêt à partir.
la source
Piratez les sources de 7-zip. Où il lit la date du fichier, insérez simplement le code pour changer la date au 01.01.1997, ou quoi que ce soit d'autre - fixé pour tous les fichiers. Compilez avec un nom différent et utilisez-le.
la source