Wie drucke ich dir den Baum eines 7zip-Archivs?

964
kev

Vor dem Auszug archive.7züberprüfe ich immer was auf der Seite:

$ 7z l archive.7z  ...SKIP...  2010-01-01 00:00:00 ..... 25856 7367 jsloader/resource/gre/modules/source-editor-textarea.jsm 2010-01-01 00:00:00 ..... 4656 1669 jsloader/resource/gre/modules/FileUtils.jsm 2010-01-01 00:00:00 ..... 1856 943 jsloader/resource/gre/modules/DownloadPaths.jsm 2010-01-01 00:00:00 ..... 7096 2724 jsloader/resource/gre/modules/CertUtils.jsm 2010-01-01 00:00:00 ..... 540 346 jsloader/resource/gre/modules/jsdebugger.jsm 2010-01-01 00:00:00 ..... 12964 4225 jsloader/resource/gre/modules/CommonDialog.jsm 2010-01-01 00:00:00 ..... 9692 3272 jsloader/resource/gre/modules/NetworkHelper.jsm 2010-01-01 00:00:00 ..... 11252 3503 jsloader/resource/gre/modules/AutocompletePopup.jsm ------------------- ----- ------------ ------------ ------------------------ 17928547 5269642 1489 files, 0 folders 

Es wird eine lange Nachricht archive.7zausgegeben, wenn viele Dateien und Verzeichnisse enthalten sind.

Das ist nicht sehr nützlich. Weil ich die Gesamtstruktur von nicht sehen kann archive.7z.

Ist es möglich, einen Verzeichnisbaum auszudrucken, bevor Sie ihn extrahieren.

├── jsloader │   └── resource │   └── gre │   ├── components │   └── modules │   ├── devtools │   ├── services-crypto │   ├── services-sync │   │   ├── engines │   │   └── ext │   └── tabview 

Ich tree -d archivebrauche den Baum nach dem Laufen 7z x archive.7z -oarchive.

Wenn ich nur die Verzeichnisse extrahieren kann archive.7z,
kann tree -d archive ; rm -r archiveich den Baum aufrufen.

4

2 Antworten auf die Frage

4
Daniel Andersson

Schneller Hack:

#!/bin/sh 7z l "$" |\ tail -n +17 |\ sed 's/.\//' |\ tac |\ awk 'NR>2 { n=split($6, a, "/")  print a[n] }' 

Speichern unter 7ztree, verwenden als

$ 7ztree archive.7z jsloader resource gre modules NetworkHelper.jsm CommonDialog.jsm jsdebugger.jsm CertUtils.jsm DownloadPaths.jsm FileUtils.jsm source-editor-textarea.jsm 
  • tailwird zum Entfernen irrelevanter Informationen verwendet. 17hier und dort waren 53für sedund 2für awkmindestens die korrekten magischen Zahlen auf meiner 7-zip-Version.
  • sedDie ersten magischen 53 Zeichen werden entfernt (dies verbessert die Handhabung von Leerzeichen awk).
  • tac wird verwendet, um die Eingabe umzukehren (andernfalls würde der Baum auf die Weise stehen, wie 7z die Auflistung darstellt).

Es ist unkompliziert, aber eigenartig, Logik hinzuzufügen, um die gleiche fantastische Ausgabe zu erhalten tree.

awkEs könnte verwendet werden, um Zeilen in einem einzigen Befehl anstelle von tailund zu filtern und umzukehren tac, aber es wäre etwas komplizierter.

BEARBEITEN:sed Zum besseren Umgang mit Leerzeichen hinzugefügt . Und in diesem Sinne eine reine sedVersion mit derselben Ausgabe wie das obige Skript in seiner aktuellen Form:

#!/bin/sh 7zr l ../testing.7z |\ tail -n +17 |\ tac |\ tail -n +3 |\ sed 's/.\//; s#[^/]*/# #g' 

Aber es wird nicht leicht sein, eine schönere Ausgabe zu erhalten.


EDIT2: Und einige Golf Perl ! :-D

#!/usr/bin/perl my @lines; my $i=0; while(<>)  for my $i (reverse 0..$#lines-2)  

Wenn man einige Zeilenumbrüche hinzufügt, ist dies wahrscheinlich der einfachste Weg, um eine schöne Ausgabeformatierung zu erstellen.

1
Andreas

Sie können ein kleines Bash-Skript ausführen, um Ihre Arbeit für Sie zu erledigen. Da ich keinen Zugang zu Linux habe und momentan nicht genug Zeit habe, kann ich Ihnen nur einen Überblick geben.

  • listen Sie den Archivinhalt auf
  • Verwenden Sie den Befehl split oder einen beliebigen anderen Befehl, um den Pfad zu extrahieren
  • Den Ordnernamen einmal ausgeben
  • Für jedes "/" - Zeichen, das Sie finden, wird Ihre Ausgabe eingerückt

Dies sollte Ihnen eine Ausgabe ähnlich der Baumstruktur geben. Sie können auch ein kleines C ++ - Programm schreiben, um das für Sie zu drucken, das einfacher oder schöner sein kann.