GPWR Asked: 2023-06-11 04:14:37 +0800 CST2023-06-11 04:14:37 +0800 CST 2023-06-11 04:14:37 +0800 CST 使用 `zipinfo` 非递归地列出档案的内容 772 是否有一个标志可以传递给命令zipinfo以非递归方式列出存档的内容? 例如,如果目标存档包含三个目录,每个目录又包含五个空目录,我不希望命令返回十五个元素,而只返回三个“顶级”或“第一级”目录。 如何实现? zip 1 个回答 Voted Best Answer Marcus Müller 2023-06-11T05:53:01+08:002023-06-11T05:53:01+08:00 对于 zip 文件格式,事情不是“递归的”。在那里,只有一个文件列表,其名称包含斜线(或更一般地,路径分隔符)。 因此,您的 zip 中实际上有 15 个“平面”条目:15 个“叶”目录。上面的目录是隐含的,因为它们是这些目录的一部分。 因此,要找到所有顶级目录,您必须遍历所有条目,提取第一个路径组件,然后删除重复项。 zipinfo -1 | sed -n 's;\([^/]*\)/.*;\1;p' | sort -u 需要注意的几件事 我不知道当文件名中有换行符时 zipinfo 的行为 如果你在机器之间转移文件,你需要诸如权限、稀疏性、所有权之类的东西…… zip 不是正确的工具,因为它不能做这些事情。此外,使用 之类的工具mksquashfs,您可以制作压缩通常更好的档案,并且可以直接使用udisksctl loop-setup -f archive.squashfs(如果需要的udisksctl mount /dev/loopN话)或直接安装mkdir mntdir; sudo mount -o loop archive.squashfs mountdir,然后您可以使用您常用的文件管理(从ls您最喜欢的文件浏览器)到以近乎零的成本检查内容。
对于 zip 文件格式,事情不是“递归的”。在那里,只有一个文件列表,其名称包含斜线(或更一般地,路径分隔符)。
因此,您的 zip 中实际上有 15 个“平面”条目:15 个“叶”目录。上面的目录是隐含的,因为它们是这些目录的一部分。
因此,要找到所有顶级目录,您必须遍历所有条目,提取第一个路径组件,然后删除重复项。
需要注意的几件事
mksquashfs
,您可以制作压缩通常更好的档案,并且可以直接使用udisksctl loop-setup -f archive.squashfs
(如果需要的udisksctl mount /dev/loopN
话)或直接安装mkdir mntdir; sudo mount -o loop archive.squashfs mountdir
,然后您可以使用您常用的文件管理(从ls
您最喜欢的文件浏览器)到以近乎零的成本检查内容。