我有 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