Ich habe ein Bash-Skript, das eine TAR-Datei erstellt. Sobald die Datei erstellt ist, möchte ich ihre Integrität testen und eine E-Mail an den Root-Benutzer senden, wenn die Integrität schlecht ist.
Ich weiß, ich müsste den Befehl verwenden tar -tf /root/archive.tar
, um die Integrität der Datei zu überprüfen, aber wie würde ich dies in einer Bash-if-Anweisung implementieren und nach Fehlern suchen?
tar
Ausgabe an umleiten/dev/null
, da Sie sie wahrscheinlich nicht wirklich sehen möchten.tar
Implementierungen erkennen oder melden alle Fehler mitt
(bsdtar
nicht, Sie könnentar xOf file.tar > /dev/null
dort verwenden). Nicht alletar
Implementierungen würden mit dem Exit-Status 2star
(255) oderbsdtar
(1) beendet werden. Entscheidend ist jedoch, dass der Exit-Status hier ungleich Null ist.exit(2)
mir wurde bezüglich der entsprechenden Manpage nicht der exakte Exit-Wert angegeben (weshalb ich im folgenden Satz »ungleich Null« explizit erwähnt hatte). Kommentierte dies (und änderte den Abschnitt nach rechts -.-).Entschuldigung, aber Sie können nicht, es scheint, dass tar nicht die Fähigkeit zum Testen besitzt (wenn Sie zum Beispiel * nix vergessen und versuchen, es mit winrar zu testen, lautet das Ergebnis: "Der Befehl wird für diese Art von Archiv nicht unterstützt")
Wie ich in den obigen Kommentaren ausgeführt habe, fehlt tar buchstäblich die interne CRC, um eine Vergleichsbedingung zu haben. Wenn Sie also ein Tar-Archiv mit einem Editor ändern, funktionieren Auflistung und Extraktion möglicherweise fehlerfrei, extrahieren jedoch beschädigte Daten
Abschließend hoffe ich hier auf eine Lösung, aber es gibt keine, zum Glück gibt es zwei gute Neuigkeiten:
Es gibt sehr, sehr SEHR seltene Tar-Archive, die nicht auch mit einem anderen Programm (wie gzip, bzip2 usw.) komprimiert wurden. Daher wird dieses Programm eine Testlösung haben und Leute, die sie nicht komprimieren, sind irgendwie lahm, WIRKLICH LAME
Für mein persönliches Problem hatte ich das Glück, dass ich nach dem Extrahieren nur eine md5sum-Datei mit CRC aller darin enthaltenen Dateien gefunden habe (selbst die Person, die arhive tar ins Netz gestellt hat und es nicht komprimieren wollte, wollte es immer noch sein verifiziert werden können)
quelle
Sie können dies tun, indem Sie die folgenden Argumente an übergeben
tar
:quelle
-c
erstellt die Datei mit dem Namen via-f
('test.tar').-z
gzippt das Archiv.-v
macht es wortreich. Ich bin mir ziemlich sicher, dass dies keine genaue Lösung ist.