staging.inyokaproject.org

*.7z-Dateien in *.zip-Dateien konvertieren - wie?

Status: Ungelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

kruppka

Anmeldungsdatum:
22. Januar 2006

Beiträge: 158

Hallo zusammen,

ich habe hier > 10.000 Logfiles, die alle in *.7z verpackt sind. Ich würde die gerne aber im *.zip-Format haben. Es gibt nur eine Komplikation: in manchen 7z-Dateien sind mehrere Logfiles, die wieder in eine zip-Datei sollen (ohne, dass sie dazu in ein Verzeichnis gesteckt werden).

Was ich schon getan habe: in Virtualbox Windows gestartet und mittels Winrar alle 7z-Dateien so entpackt, dass alle Archive mit mehr als einem Logfile in ein Verzeichnis gesteckt wurden.

Was noch getan werden muss: alle entpackten 7z-Dateien (im Verzeichnis) automatisiert so verpacken (zip), dass nicht einfach der Ordner verpackt wird, sondern nur die Logfiles im Ordner.

Geht das mit Mitteln des Terminals?

Danke vorab!

KruppKa

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5077

kruppka schrieb:

Was ich schon getan habe: in Virtualbox Windows gestartet und mittels Winrar alle 7z-Dateien so entpackt, dass alle Archive mit mehr als einem Logfile in ein Verzeichnis gesteckt wurden.

Ginge auch mit Linux: 7z

Was noch getan werden muss: alle entpackten 7z-Dateien (im Verzeichnis) automatisiert so verpacken (zip), dass nicht einfach der Ordner verpackt wird, sondern nur die Logfiles im Ordner.

Sofern deine Ordernamen keine Leerzeichen enthalten:

1
2
3
for dir in *; do
    zip -j "$dir.zip" $dir/*;
done

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Von der Sache her brauchst Du den Umweg über Win... eigentlich nicht, würde ich sagen, denn es gibt 7z auch unter *nix.

Was Du wohl nicht vermeiden kannst, ist der Umweg über ein temporäres Verzeichnis, das Du nachher wieder einpackst, z.B. mit zip .
Eventuell können Dateirechte dabei verloren gehen, wenn Du ein Archiv in einem fremden Dateisystem entpackst, aber das wird hier egal sein.

Die Syntax von zip ist eigentlich ganz einfach:

cd  /in/mein/verzeichnis
zip  /neues/zielverzeichnis/das_neue_archiv.zip  *

Damit sollten die Dateien ohne Pfadvorgabe im Archiv landen. (probier es einfach aus: → unzip -l das_neue_archiv.zip )

LG,

track

kruppka

(Themenstarter)

Anmeldungsdatum:
22. Januar 2006

Beiträge: 158

Doch, Leerzeichen sind vorhanden - kann man das anpassen?

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

@ sebix: Dein Vorschlag mit der Option -j ist ein guter Tip !

Handwerklich würde ich noch 2 Kleinigkeiten nachtragen:

for dir in */ ; do
    zip -j "${dir%/}.zip"  "$dir"*;
done
  1. Das */ findet nur die Verzeichnisse, Dateien werden übergangen. (ok, man muss den "/" hinterher wieder entfernen)

  2. Das Zielverzeichnis kann man bis zum Stern bequem "quoten", dann ist es komplett.

LG,

track

axt

Anmeldungsdatum:
22. November 2006

Beiträge: 34254

kruppka schrieb:

Ich würde die gerne aber im *.zip-Format haben.

Wobei die grundsätzliche Frage besteht, wozu? Das modernere .7z packt wesentlich effizienter, gerade auch ASCII-Files.

Wobei man nicht die bis in inkl. Xenial vorhandene angestaubte Version 9.20 (es hat mal wieder lange gedauert, zu lange, bis wenigstens der aus 7-zip 16.00 bzw. 15.14.1+dfsg-2 sehr wichtige Security Patch rückportiert worden ist) verwenden sollte, sondern 15.14.1+dfsg-2 aus Yakkety (übernommen aus debian sid). Gestern sind p7zip_16.02_src_all.tar.bz2 bzw. ein erstes Binary (x64) erschienen (damit mit 7-zip endlich gleichziehend).

Antworten |