使用“zipinfo”非递归地列出存档的内容

使用“zipinfo”非递归地列出存档的内容

是否有一个标志可以传递给命令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您最喜欢的文件浏览器)以接近零的成本检查内容。

相关内容