J'ai exécuté un test en créant deux goudrons à partir du même répertoire (ses fichiers sont restés inchangés), et j'ai trouvé que leurs sommes md5 étaient différentes. Je suppose qu'il y a un horodatage inclus dans l'en-tête du tar, mais je n'ai pas trouvé le moyen de le remplacer. Mon système d'exploitation est Ubuntu 9.1. Des idées ?
Merci.
touch filename
qui change l'heure modifiée d'un fichier suffit à changer la somme de contrôle.Réponses:
Comme Dennis l'a souligné ci-dessus, c'est gzip. Une partie de l'en-tête gzip est une heure de modification pour tout ce qui est compressé dans le fichier. Si vous avez besoin de gzip, vous pouvez compresser le fichier tar en tant qu'étape supplémentaire en dehors de tar plutôt que d'utiliser le gzip interne de tar. La commande gzip a un indicateur pour supprimer l'enregistrement de ce temps de modification.
Cela n'affectera pas les heures à l'intérieur du fichier tar, seulement celle de l'en-tête gzip.
la source
GZIP=-n tar -cz ...
Pour créer un fichier tar avec une somme de contrôle cohérente, ajoutez simplement
GZIP=-n
ceci:Comment cela fonctionne: Tar peut accepter les options gzip en utilisant une
GZIP
variable d'environnement temporaire , comme ci-dessus. Comme l'a dit Valter, tar utilise gzip, qui par défaut place un horodatage dans l'archive. Cela signifie que vous obtenez une somme de contrôle différente lorsque vous compressez les mêmes fichiers. L'-n
option désactive cet horodatage.la source
J'ai aussi eu ce problème, pour que gzip ne modifie pas l'horodatage, utilisez
gzip -n
-n, --no-name ne pas enregistrer ou restaurer le nom et l'horodatage d'origine
Exemple:
la source
Je suis descendu dans un lapin après que les autres réponses m'ont échoué et j'ai réussi à comprendre que ma version de tar (1.27.1 du repo openSUSE 42.3 OSS) utilisait le
pax
format d'archivage non déterministe par défaut, ce qui signifie que même sans compression, (et même en définissant explicitement le mtime) les archives créées avec tar à partir des mêmes fichiers seraient différentes:Notez que la sortie ci-dessus diffère, même si aucune compression n'est utilisée ; le contenu de l'archive non compressé (généré en exécutant tar deux fois sur le même contenu) est différent, de sorte que le contenu compressé sera également différent même lors de l'utilisation
GZIP=-n
comme le suggèrent d'autres réponsesPour contourner cela, vous pouvez spécifier
--format gnu
:Cela fonctionne avec la suggestion de gzip ci-dessus:
Cependant, en plus des raisons valables de préférer de meilleurs formats de compression à gzip , vous voudrez peut-être envisager d'utiliser xz à la place (que tar prend également en charge avec les drapeaux
--xz
ou à la-J
place de-z
), car cela vous évite une étape ici; le comportement par défaut dexz
est de générer la même sortie compressée lorsque le contenu non compressé est le même, il n'est donc pas nécessaire de spécifier une option commeGZIP=-n
:la source