web-dev-qa-db-fra.com

Tester l'intégrité du fichier tar dans bash

J'ai un script bash qui crée un fichier '.tar'. Une fois le fichier créé, je voudrais tester son intégrité et envoyer un email à l'utilisateur root si l'intégrité est mauvaise.

Je sais que je devrais utiliser la commande tar -tf /root/archive.tar pour vérifier l'intégrité du fichier, mais comment pourrais-je l'implémenter dans une instruction bash if et rechercher les erreurs?

28
Chris

Si tar trouve des erreurs dans son entrée, il exit(3) ¹ avec une valeur de sortie non nulle. Cela - avec la plupart des implémentations tar - est également effectué lors de la liste du contenu des archives avec t. Vous pouvez donc simplement vérifier la valeur de sortie de tar pour déterminer si quelque chose s'est mal passé:

if ! tar tf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

Si votre tar ne trouve pas toutes les erreurs avec t, vous pouvez toujours extraire l'archive vers stdout et rediriger stdout vers /dev/null, qui serait l'approche la plus lente mais la plus fiable:

if ! tar xOf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

¹ Cette notation indique la page de manuel, pas l'appel réel. Voir man 3 exit .

38
Andreas Wiese

désolé, mais vous ne pouvez pas, semble que tar n'a pas la capacité de tester (par exemple, si vous oubliez * nix et essayez de le tester avec winrar, le résultat sera: "La commande n'est pas prise en charge pour ce type d'archive")

comme je l'ai souligné dans les commentaires ci-dessus, tar manque littéralement CRC interne pour avoir un terme de comparaison, donc si vous changez une archive tar avec un éditeur, la liste et l'extraction peuvent fonctionner sans erreur sans erreur, mais extraire les données corrompues

en conclusion, je me retrouve ici dans l'espoir d'une solution, mais il n'y en a pas, heureusement il y a deux bonnes nouvelles:

il existe des archives tar très, très, TRÈS rares qui ne sont pas également compressées avec un autre programme (comme gzip, bzip2, etc.) donc ce programme aura une solution de test et les gens qui ne les compressent pas sont un peu boiteux , VRAIMENT LAME

pour mon problème personnel, j'ai de la chance, après l'avoir extrait, je viens de trouver un fichier md5sum avec CRC de tous les fichiers à l'intérieur (même la personne qui a mis du tar arhive sur le net et ne voulait pas le compresser, il voulait toujours être vérifiable)

1
THESorcerer