Wie kann ich alle * .doc-Dateien in einem Zip-Archiv auflisten, einschließlich Dateien in Unterverzeichnissen?

7

Ich habe Zip-Dateien, die so aussehen könnten:

$ zipinfo -1 zip.zip
doc.doc
dotx.dotx
xls.xls
ppt.ppt
txt.txt
c.c
subdir/subdir2/doc.doc
subdir/xls.xls
subdir/ppt.ppt
subdir/c.c
subdir/txt.txt
subdir/subdir2/
subdir/

Ich möchte, dass alle * .doc-Dateien gedruckt werden, aber zipinfo -1 zip.zip *.docnur die .doc-Dateien im Stammverzeichnis der Zip-Datei. Wie kann ich alle DOC-Dateien in allen Unterverzeichnissen drucken?

MMM
quelle

Antworten:

3
zipinfo -1 zip.zip '*.doc'

funktioniert bei mir und zeigt alle Dateien in Unterverzeichnissen an. Ich denke, Sie vergessen die Zitate um die *.doc. Ohne die Anführungszeichen wird das *.docauf alle .docDateien im aktuellen Verzeichnis erweitert und dann als Suchmuster an zipinfo übergeben. Wenn Sie also eine entpackte Version des Archivs im lokalen Verzeichnis haben, zeigt der Befehl nur .docDateien der obersten Ebene an .

Bei Anführungszeichen ist das Argument vor der Shell geschützt, sodass der Platzhalter es tatsächlich zipinfoerfolgreich schafft .

ire_and_curses
quelle
2

Sie können dieses versuchen:

zipinfo -1 zip.zip | grep '\(/\|^\)*.\.doc$'
user1146332
quelle
0

Wenn Sie das Archiv als Verzeichnis bereitstellen, können Sie die üblichen Befehle verwenden, ohne sich Gedanken darüber machen zu müssen, dass sich die Dateien in einem Archiv befinden.

Das AVFS- Dateisystem bietet eine Ansicht des Dateisystems, in der auf jede Archivdatei /path/to/foo.zipals Verzeichnis zugegriffen werden kann~/.avfs/path/to/foo.zip# . AVFS bietet schreibgeschützten Zugriff auf die meisten gängigen Archivdateiformate. Führen Sie den Befehl aus

mountavfs

einmal nach jedem Neustart (wenn Sie jemals die Bereitstellung aufheben möchten ~/.avfs, führen Sie sie aus fusermount -u ~/.avfs).

Danach funktionieren die üblichen Befehle:

cd ~/.avfs$PWD
find zip.zip\# -name '*.doc'

oder

ls ~/.avfs$PWD/zip.zip\#/**/*.doc
Gilles 'SO - hör auf böse zu sein'
quelle