如何列出 Zip 存档中的所有 *.doc 文件,包括子目录中的文件?

如何列出 Zip 存档中的所有 *.doc 文件,包括子目录中的文件?

我有 Zip 文件,可能如下所示:

$ 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/

我希望它打印所有 *.doc 文件,但zipinfo -1 zip.zip *.doc只打印 Zip 文件根目录中的 .doc 文件。如何打印所有子目录中的所有 .doc 文件?

答案1

zipinfo -1 zip.zip '*.doc'

对我有用,显示子目录中的所有文件。我认为您忘记了周围的引号*.doc。如果没有引号,则*.doc扩展为.doc当前目录中的所有文件,然后将其作为搜索模式传递​​给 zipinfo。因此,如果本地目录中存在存档的解压缩版本,则该命令将仅显示顶级.doc文件。

使用引号,参数可以免受 shell 的影响,因此通配符实际上可以zipinfo成功实现。

答案2

你可以试试这个:

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

答案3

如果将存档安装为目录,则可以使用常用命令,而不必担心文件位于存档内。

AVFS文件系统提供了文件系统的视图,其中每个存档文件都/path/to/foo.zip可以作为目录进行访问~/.avfs/path/to/foo.zip#。 AVFS 提供对最常见存档文件格式的只读访问。运行命令

mountavfs

每次重新启动后一次(如果您想卸载~/.avfs,请运行fusermount -u ~/.avfs)。

之后,通常的命令将起作用:

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

或者

ls ~/.avfs$PWD/zip.zip\#/**/*.doc

相关内容