Vor kurzem musste ich für eine große Anzahl von Zip-Files herausfinden, wieviele Dateien pro Zip-Archiv enthalten sind. Der einfachste Teil ist noch unzip -l aufzurufen, doch das zeigt auch Verzeichnisse und Ressource-Files mit an, wenn man dies nicht ausschließt. Danach kann man mit tail -1 die Summenzeile bekommen, jedoch enthält diese noch die die Größe und viele Leerzeichen. Um nun aus einer Zeile wie 18122818 700 files das erwünschte Ergebnis 700 files zu bekommen, wirft man das Zwischenergebnis noch sed mit zwei Regular Expressions vor.

Eigentlich ganz einfach - oder?

    for zip in $(< /tmp/zipfiles.txt);
         do echo "${zip}\t`unzip -l "$zip" -x '__MACOSX/*' '.*' '*/'
         | tail -1
         | sed -e 's/[ ]*[0-9]* //' -e 's/[ ]*//'`"
         >> /tmp/file_content.txt;
    done;