是否有一个标志可以传递给命令zipinfo
以非递归地列出存档的内容?
例如,如果目标存档包含三个目录,每个目录又包含五个空目录,我不希望命令返回十五个元素,而只返回三个“顶部“ 或者 ”第一级” 目录。
如何才能实现这一目标?
答案1
对于 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
您最喜欢的文件浏览器)以接近零的成本检查内容。