WulfmanGER
Commander
- Registriert
- Juli 2005
- Beiträge
- 2.298
Hallo zusammen,
ich hab oftmals die Situation das ich 10+ RARs/ZIPs auspacken muss. Jetzt passiert es hin und wieder das im Archiv eine Datei nicht vollständig entpackt werden kann (es handelt sich um Bilder; es kommt beim Entpacken ein CRC und im Ergebnis sieht das Bild dann "abgeschnitten" aus). Wenn ich das "händisch" angehe ist das alles kein Problem. Kommt ein Fehler .... sortiere ich das Archiv aus und guck mir den Fehler näher an. Bei mehreren Files gibt mir 7z (nutze ich noch in der Windows-Version des Scripts, die WSL/Linux-Version kann 7z nicht nutzen ... gibt leider keine Weiterentwicklung und die aktuellste Version hat einen Bug mit bestimmten Zeichensatz-Konstellationen; zudem bekomme ich gerade immer mehr RAR5-Archive - die kann 7z nicht) zwar am Ende eine Fehlermeldung (in irgendeinem der 30 Archive war jetzt ein CRC-Fehler ... TOLL), aber so richtig Glücklich macht mich das nicht. Unrar ist da nicht besser ... Unzip kann ich leider mangels fehlerhaften Archiven nichts zu sagen.
Ich suche nun eine Möglichkeit eben diese Fehlermeldung in eine Datei auszulagern - inkl. des betroffenen Archivnamens.
Meine Versuche waren bisher nicht so erfolgreich (gerade erst mit Linux-Bash angefangen ...)
So sieht mein Script (Auszug) bisher aus:
Erstmal prüfen ob ich ggf. schon mal ausgepackt habe -> Skip mit continue.
Ich prüfe ob die Datei ein ZIP oder RAR ist. Der Entpackbefehl sorgt dafür das ich die Verzeichnisstruktur im Archiv nicht übernehme und in einen Ordner mit dem Namen des Archivs (ohne Endung) entpacke.
Das klappt bisher (ich befürchte da kommen noch Fehler - aber meine Archive sind "begrenzt" sauber. Jetzt fehlt halt die Fehlererkennung.
RAR bringt mir z.b. sowas:
047.jpg - checksum error
bzw. als Zusammenfassung:
Total errors: 1
Ich möchte nicht das das Entpacken gestoppt wird (manchmal kommen auch Fehlermeldungen obwohl alles sauber ausgepackt werden konnte). Nur am Ende in einer "error.txt" => "Error: balbal.rar" - das prüfe ich dann händisch.
Mit unrar e -ad -idq "$i" 2>> error.txt bekomme ich zwar nur den Fehler in die error.txt - aber bei welchen Archiv ... zudem müllt es die Datei zu wenn mehr Fehler enthalten sind (ich muss/will nur über einen Informiert werden). Daher wohl am besten ich lese irgendwie "Total Errors" aus ... wenn es existiert -> error.txt mit Archivnamen.
Mit unzip kann ich leider mangels defekten ZIPs nicht rumspielen. Wenn jemand ne idee hat wie ich ein ZIP kaputt mache ...
Tja hier hänge ich also ...
Hoffe hier kann mir jemand ein wenig weiterhelfen. Ich denke mal das es am Ende gar nicht sooo schwer ist Aber wie gesagt: ich hab mit BASH-Scripting gerade erst angefangen.
Grüße
ich hab oftmals die Situation das ich 10+ RARs/ZIPs auspacken muss. Jetzt passiert es hin und wieder das im Archiv eine Datei nicht vollständig entpackt werden kann (es handelt sich um Bilder; es kommt beim Entpacken ein CRC und im Ergebnis sieht das Bild dann "abgeschnitten" aus). Wenn ich das "händisch" angehe ist das alles kein Problem. Kommt ein Fehler .... sortiere ich das Archiv aus und guck mir den Fehler näher an. Bei mehreren Files gibt mir 7z (nutze ich noch in der Windows-Version des Scripts, die WSL/Linux-Version kann 7z nicht nutzen ... gibt leider keine Weiterentwicklung und die aktuellste Version hat einen Bug mit bestimmten Zeichensatz-Konstellationen; zudem bekomme ich gerade immer mehr RAR5-Archive - die kann 7z nicht) zwar am Ende eine Fehlermeldung (in irgendeinem der 30 Archive war jetzt ein CRC-Fehler ... TOLL), aber so richtig Glücklich macht mich das nicht. Unrar ist da nicht besser ... Unzip kann ich leider mangels fehlerhaften Archiven nichts zu sagen.
Ich suche nun eine Möglichkeit eben diese Fehlermeldung in eine Datei auszulagern - inkl. des betroffenen Archivnamens.
Meine Versuche waren bisher nicht so erfolgreich (gerade erst mit Linux-Bash angefangen ...)
So sieht mein Script (Auszug) bisher aus:
Code:
for i in *
do
checkFile=$(file "$i")
[ -d "${i%.*}" ] && echo ""$i": Verzeichnis bereits vorhanden (skip)" >> error.txt; continue
if [[ "${checkFile,,}" =~ "zip" ]]
then
unzip -j -O WIN "$i" -d "${i%.*}"
elif [[ "${checkFile,,}" =~ "rar" ]]
then
unrar e -ad "$i"
fi
done
Ich prüfe ob die Datei ein ZIP oder RAR ist. Der Entpackbefehl sorgt dafür das ich die Verzeichnisstruktur im Archiv nicht übernehme und in einen Ordner mit dem Namen des Archivs (ohne Endung) entpacke.
Das klappt bisher (ich befürchte da kommen noch Fehler - aber meine Archive sind "begrenzt" sauber. Jetzt fehlt halt die Fehlererkennung.
RAR bringt mir z.b. sowas:
047.jpg - checksum error
bzw. als Zusammenfassung:
Total errors: 1
Ich möchte nicht das das Entpacken gestoppt wird (manchmal kommen auch Fehlermeldungen obwohl alles sauber ausgepackt werden konnte). Nur am Ende in einer "error.txt" => "Error: balbal.rar" - das prüfe ich dann händisch.
Mit unrar e -ad -idq "$i" 2>> error.txt bekomme ich zwar nur den Fehler in die error.txt - aber bei welchen Archiv ... zudem müllt es die Datei zu wenn mehr Fehler enthalten sind (ich muss/will nur über einen Informiert werden). Daher wohl am besten ich lese irgendwie "Total Errors" aus ... wenn es existiert -> error.txt mit Archivnamen.
Mit unzip kann ich leider mangels defekten ZIPs nicht rumspielen. Wenn jemand ne idee hat wie ich ein ZIP kaputt mache ...
Tja hier hänge ich also ...
Hoffe hier kann mir jemand ein wenig weiterhelfen. Ich denke mal das es am Ende gar nicht sooo schwer ist Aber wie gesagt: ich hab mit BASH-Scripting gerade erst angefangen.
Grüße