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 ..

Jan Hrcek
quelle
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}'
Thor
quelle
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
3

unzip -ZRuft den Zipinfo-Modus auf , was bedeutet, dass Sie unzip -Z -1 myzip.zip | head -1das gleiche Ergebnis erzielen können , aber es ist viel knapper

jaygooby
quelle