Script um Integrität vieler bestehender 7z Archive zu prüfen?

DS111-User

Benutzer
Mitglied seit
13. Feb 2011
Beiträge
285
Punkte für Reaktionen
14
Punkte
18
Mit der Zeit haben sich in einem Photo-Verzeichnis unzählige 7z-Archive angesammelt.
Beim stichprobenartigen Öffnen in der File Station habe ich festgestellt, dass einzelne Archive "korrupt" sind, das heisst ein Fehler wie "kann nicht geöffnet werden" erscheint.

Deshalb möchte ich alle vorhandenen 7z Archive in einem Rutsch via PuTTY prüfen lassen, mit sowas wie diesem Einzeiler:
Code:
for filename in *.7z; do if 7z t $filename 2>&1 > /dev/null; then echo $filename OK; else echo $filename ist fehlerhaft; fi; done

Leider kommt beim Aufruf dieser Zeile immer "ist fehlerhaft" zurück, auch bei ganz sicher nicht defekten Archiven.
Eine Ursache könnte sein, dass alle 7z Archive passwortgeschützt sind. Ich möchte nur das Archiv als ganzes testen, nicht die enthaltenen Dateien und deshalb möglichst nicht für jedes Archiv das jeweilige Passwort angeben müssen.

Kann mir jemand mit besseren bash-/busybox-Kenntnissen sagen, was an der Schreibweise falsch ist, bzw. wie ich die Integrität für viele Archive mit "7z t" sonst prüfen könnte?
 

DS111-User

Benutzer
Mitglied seit
13. Feb 2011
Beiträge
285
Punkte für Reaktionen
14
Punkte
18
Nach weiteren Nachforschungen im Internet habe ich eine alternative Lösung gefunden:
Statt mit 7z t zu testen, versuche ich die Dateien innerhalb des Archivs mit 7z l zu lesen.
Erzeugt das z.B. in einem defekten Archiv einen "Error:", dann erkenne ich diesen Fehler dank GREP und gebe entweder "fehlerhaft" oder "OK" in Spalte 90 aus. Die Spalte 90 wähle ich deshalb, weil viele meiner Archivnamen ziemlich lang sind und ich den Status einigermassen übersichtlich untereinander sehen will.

Bash:
for filename in *.7z; do if 7z l "$filename" | grep "Error:" 2>&1 > /dev/null; then printf '%-90sfehlerhaft\n' "$filename"; else printf '%-90sOK\n' "$filename"; fi; done
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
9.033
Punkte für Reaktionen
1.616
Punkte
308
Bei einem Archiv mit verschlüsseltem Dateinamen wird hier unter Windows mit 7z l <Datei> das Passwort verlangt und bei Falscheingabe mit Error: ... quittiert.
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.332
Punkte für Reaktionen
624
Punkte
174
Wenn Du sicherstellen möchtest, dass Dateien/Archive noch so sind, wie bei der Erstellung, dann kommst Du nicht drum rum, über die Datei(en) einen HASH zu bilden.
Sollte der HASH irgendwann nicht mehr passen, dann weißt Du, dass die geprüfte Datei/Archiv sich verändert hat.
 

DS111-User

Benutzer
Mitglied seit
13. Feb 2011
Beiträge
285
Punkte für Reaktionen
14
Punkte
18
@synfor: Wie kommst Du jetzt auf Windows? Wir sind doch hier in einem Synology-Forum? ;)

@AndiHeitzer: Grundsätzlich hast Du Recht. Eine Veränderung innerhalb eines intakten Archivs festzustellen war aber in meinem Fall nicht der Ursprung. Es ging mir nur darum festzustellen, ob durch das hin- und her kopieren zwischen verschiedenen Systemen die Archive als ganzes intakt blieben.
Wer jedoch sicher sein will jegliche Art von Veränderung festzustellen, der kommt tatsächlich nicht um eine Prüfsumme rum.
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
9.033
Punkte für Reaktionen
1.616
Punkte
308
Du meinst also, dass sich 7z unter Linux beim Auflisten des Archivinhaltes bei verschlüsselten Archiven mit verschlüsselten Dateinamen anders verhält als unter Windows?
 

DS111-User

Benutzer
Mitglied seit
13. Feb 2011
Beiträge
285
Punkte für Reaktionen
14
Punkte
18
Ich meine, mein 1-Zeiler funktioniert auf meiner DS mit meiner Version 7z und meinen 7z-Archiven wie gewünscht. Alles andere wäre geraten.

Wenn Du aber tatsächlich verschlüsselte Dateinamen in einem Passwort geschützten Archiv benutzt (also man das Passwort sofort beim Öffnen eines 7z-Archivs eintippen muss, bevor man irgendwelchen Inhalt sieht), dann kann ich dazu keine Aussage machen. Diese Variante von 7z Archiven verwende ich nicht. So geheim sind meine nummerierten Foto Namen auch wieder nicht.
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
9.033
Punkte für Reaktionen
1.616
Punkte
308
Wenn du nur selbst erstellte Archive hast und du diese Option nicht nutzt, funktioniert das. Trotzdem war mein Einwand nicht verkehrt. Nicht das jemand deinen Einzeiler einfach übernimmt und wegen Error vermeintlich defekte Archive in die Tonne haut.
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat