Ermitteln Sie den Namen eines Ordners in einem Stammverzeichnis in der ZIP-Datei


3

Ich benutze Fedora 17 und bash als meine Shell. Ich habe eine bestimmte Zip-Datei, die nur einen Ordner im Stammverzeichnis enthält. Dh beim Entpacken der Zip-Datei sehe ich folgendes:

> unzip myzip.zip
> ls
myzip.zip folderThatWasInsideZip

Angenommen, die ZIP-Datei enthält nur einen Ordner. Wie kann ich den Namen des Hauptordners in der ZIP-Datei ermitteln , ohne die ZIP-Datei zu entpacken?

Ich suche einen Einzeiler, mit dem ich so etwas machen kann:

> <command> myzip.zip
folderThatWasInsideZip

Ich weiß, dass es Möglichkeiten gibt, alle Dateien in der Zip-Datei mit aufzulisten less, aber das listet alle Dateien in den Unterverzeichnissen usw. auf. Ich möchte nur den Namen des einen Ordners wissen. Ich weiß, ich vermisse etwas Grundlegendes ..


Die Option -l wird verwendet, um die Dateien aufzulisten, anstatt die ZIP-Datei zu entpacken. siehe mann entpacken.
1.

Antworten:


3

Dieser Befehl scheint zu tun, was Sie wollen:

unzip -qql myzip.zip | head -n1 | tr -s ' ' | cut -d' ' -f5-

Oder mit GNU sed:

unzip -qql myzip.zip | sed -r '1 {s/([ ]+[^ ]+){3}\s+//;q}'

Das würde mir die Antwort geben, aber es entpackt die Zip-Datei. Ich muss es tun, ohne den Reißverschluss auszupacken, wie ich in der Frage schreibe. Gibt es einen Weg?
Jan Hrcek

@JanHrcek: Betrachtet man GDB-Traces nach unzipund unzip -lzeigt an, dass die inflate_block()Funktion nicht mit aufgerufen wird -l, dh die Datei wird nicht dekomprimiert, nur Metadaten werden gelesen.
Thor

Ja, du hast recht :) Entschuldigung.
Jan Hrcek

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.