Anzahl der Elemente der obersten Ebene im ZIP-Archiv zählen

374
BallpointBen

Ich suche einen Terminalbefehl, um die Anzahl der Elemente der obersten Ebene in einem ZIP-Archiv zu zählen. Ich weiß, dass zip -l archive.zipdie Anzahl der Dateien angezeigt wird, aber dies zeigt alle Dateien an, nicht nur Elemente der obersten Ebene. Wenn archive.zipwird Folgendes entpackt (* zeigt die oberste Ebene an)

* Dir1 File1 File2 * Dir2 File3 File4 File5 File6 * Dir3 * File7 * File8 

dann möchte ich ein programm ausgeben 5.

3
Verwenden Sie `unzip -l archive.zip | grep / | grep -v" /.*/"|wc -l ". Der erste Filter zeigt nur die Zeilen mit Dateien, der zweite beseitigt Unterverzeichnisse und der dritte gibt die Zeilenzahl zurück. Wenn das Archiv absolute Pfade hat, müssen Sie zwei Schrägstriche zulassen und drei oder mehr eliminieren. AFH vor 7 Jahren 0
Dies zeigt die Anzahl der Elemente auf einer anderen Ebene. Aber ich schätze, ich kann einfach von der Ausgabe von `unzip -l archive.zip | abziehen grep -v / | wc -l`, richtig? Entschuldigung, dass mein ursprünglicher Beitrag nicht klar war BallpointBen vor 7 Jahren 0
Wenn Sie das `| wc -l` verpassen, werden die betrachteten Dateien angezeigt, und zwar die der obersten. Es gibt einen Fehler (!): Wenn der Archivpfad ein einzelnes `/` enthält, wird dies gezählt. Sie benötigen einen zusätzlichen Filter, um ihn auszuschließen, zB ersetzen Sie `grep /` durch `grep" ^. * / "`. AFH vor 7 Jahren 0

1 Antwort auf die Frage

0
BallpointBen

Inspiration von AFH, um diese Lösung zu verwenden

zipinfo -1 archive.zip |  egrep '^[^/]+/?$' |  egrep -v '__MACOSX' |  wc -l | awk '{$1=$1};1' 

Was es macht:

Get list of files in archive Filter for top-level files or dirs; must either contain no '/' or end in '/' Remove lines containing __MACOSX (for archives created on a Mac) Get line count Remove trailing whitespace; http://unix.stackexchange.com/a/205854/169465