Bonjour,
j'ai besoin de vérifier l'intégrité d'un fichier dans un tar en utilisant la md5sum contenue dans un autre fichier de ce tar, et ce à la volée (je ne veux pas copier le fichier à vérifier sur le disque)
Y'a-t-il un moyen simple de faire ça ?
A la limite je peux générer le md5 de mon fichier a vérifier et la comparer avec celle contenue dans l'autre fichier en utilisant sed, awk ou je ne sais quoi, mais ça serait dommage.
Merci d'avance.
Forum Programmation.shell tar et md5
10
sept.
2010
# Première idée
Posté par Johands . Évalué à 2.
johan:MegaBook /tmp $ tar tf toto.tar.gz
toto/
toto/winrg.swf.md5
toto/winrg.swf
johan:MegaBook /tmp $ tar xzf toto.tar.gz toto/winrg.swf.md5 -O
7f4570b06987fb9baf8f05169198f224 winrg.swf
johan:MegaBook /tmp $ tar xzf toto.tar.gz toto/winrg.swf -O | md5sum
7f4570b06987fb9baf8f05169198f224 -
Mais si tu cherches à faire md5sum -c directement, c'est une autre histoire.
[^] # Re: Première idée
Posté par SimaHWT . Évalué à 0.
# Une solution possible...
Posté par Jérôme Pinot (site web personnel) . Évalué à 5.
$ tar tf plop.tar.gz
plop/
plop/truc
plop/truc.md5
$ tar xzf plop.tar.gz plop/truc -O | md5sum | grep -q `tar xzf plop.tar.gz plop/truc.md5 -O|cut -d" " -f1` && echo OK || echo FAIL
Ça sort OK si le md5 correspond, FAIL sinon.
[^] # Re: Une solution possible...
Posté par SimaHWT . Évalué à 1.
merci beaucoup, c'est classe aussi.
# Il faut plusieurs lignes
Posté par Kerro . Évalué à 2.
(
MD5_PRECALCULE=$(tar --extract --to-stdout --file archive.tar rep/toto.md5 | cut --delimiter=' ' --fields=1)
MD5_ACTUEL=$(tar --extract --to-stdout --file archive.tar rep/toto.txt | md5sum | cut --delimiter=' ' --fields=1)
if [[ "$MD5_PRECALCULE" == "$MD5_ACTUEL" ]];
then echo ouiiii
else
echo nooooon
fi
)
Inconvénient: l'archive est lue deux fois. Donc si elle est grosse et que tes fichiers sont situés à la fin, c'est un problème.
Si tu veux optimiser, tu peux utiliser quelque chose du genre:
tar --extract --to-stdout --verbose --file archive.tar 'rep/toto.txt' 'rep/toto.md5'
Il faut alors envoyer la sortie vers tee afin afin de lire le contenu de chaque fichier et de le traiter correctement avec sed ou awk.
[^] # Re: Il faut plusieurs lignes
Posté par Phil Actaire . Évalué à 2.
Et puis la lecture préliminaire du fichier contenant le hash permet éventuellement d'obtenir le chemin/nom du fichier à vérifier.
C'est plus générique.
# On récupère les paramètres
ARCHIVE="${1}"
SUMFILE="${2}"
# On lit le hash et le nom de fichier
MD5SUM=$(tar --extract --to-stdout --file ${ARCHIVE} ${SUMFILE})
MD5=$(expr "$MD5SUM" : "\([0-9a-fA-F]*\) .")
FNAME=$(expr "$MD5SUM" : "${MD5} .\(.*\)$")
# On vérifie
tar --extract --to-stdout --file ${ARCHIVE} "${FNAME}" | md5sum -c "${MD5} -" # Attention, 2 espaces entre MD5 et -
On lit toujours 2 fois l'archive mais c'est réutilisable.
Bien sûr, il est nécessaire que le chemin indiqué dans le md5 corresponde à celui de l'archive sinon on modifie le chemin à la volée...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.