So listen Sie Dateien in einer ZIP-Datei ohne zusätzliche Informationen in der Befehlszeile auf

37

Wenn ich in meiner Bash-Befehlszeile verwende, unzip -l test.ziperhalte ich die Ausgabe wie folgt :

Archive:  test.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
   810000  05-07-2014 15:09   file1.txt
   810000  05-07-2014 15:09   file2.txt
   810000  05-07-2014 15:09   file3.txt
---------                     -------
  2430000                     3 files

Mich interessieren aber nur die Zeilen mit den Dateidetails.

Ich habe versucht, mit grep wie folgt zu filtern:

unzip -l test.zip | grep -v Length | grep -v "\-\-\-\-" | g -v Archive | grep -v " files"

Aber es ist lang und fehleranfällig (zB ein Dateiname Archiv in dieser Liste wird gelöscht)

Gibt es andere Optionen mit unzip -l (ich habe die Manpage zum Entpacken überprüft und keine gefunden) oder einem anderen Tool, um dies zu tun?

Es ist mir wichtig, das Archiv nicht wirklich zu entpacken, sondern nur nachzuschauen, welche Dateien sich darin befinden.

рüффп
quelle
Die akzeptierte Antwort ist viel besser als diese; Ich möchte jedoch bemerken, dass alles, was mehrere grepElemente enthält, in ein Awk-Skript umgewandelt werden kann, in der Regel mit deutlich verbesserter Genauigkeit. awk 'NR >3 { if (/^ *---/) exit 0; print }'würde die ersten drei Zeilen sowie die Fußzeile abschneiden und auch in Reichweite sein, um einfach nur den Dateinamen zu extrahieren (Hinweis:) print substr($0, 29).
Tripleee
Ja, da stimme ich voll und ganz zu, genau deshalb stelle ich diese spezielle Frage: um eine bessere und tragfähige Lösung zu finden.
рüффп

Antworten:

55
zipinfo -1 file.zip

Oder:

unzip -Z1 file.zip

Würde nur die Dateien auflisten.

Wenn Sie immer noch die zusätzlichen Informationen für jeden Dateinamen benötigen, können Sie Folgendes tun:

unzip -Zl file.zip | sed '1,2d;$d'

Oder:

unzip -l file.zip | sed '1,3d;$d' | sed '$d'

Oder (unter der Annahme von GNU head):

unzip -l file.zip | tail -n +4 | head -n -2
Stéphane Chazelas
quelle
danke mächtig sed ... genau das was ich wollte; Auch das zipinfo Tool ist interessant, ich wusste es nicht.
рüффп
Gibt es eine Möglichkeit, Verzeichnisse zu ignorieren? unzip -Z1 zipfile.zipwird ausgeben: directory / und directory / file.extension (Hinweis: Verzeichnisnamen mit. sind wahrscheinlich, also | grep .funktioniert das Hinzufügen von a nicht)
Matt