有人问过类似的问题,但我找不到我想要的。基本上,我有一个包含子目录和许多文件的大目录,我想递归进入每个目录和子目录,并单独压缩每个文件。我找到了这个解决方案,但它不是我想要的:
find . -type f -execdir zip '{}.zip' '{}' \;
这会将 zip 文件输出到它们来自的目录中。但是,我希望 zip 文件位于完全独立的目录中,但具有相同的目录结构,并且仅包含生成的 zip 文件。有人能帮忙吗?
答案1
您可以在 zip 文件位置前面添加一个相对路径,如下所示:
find . -type f -exec zip -D '../zipdir/{}.zip' '{}' \;
如果需要,可以执行以下操作来创建目录结构:
find . -type d -exec mkdir -p '../zipdir/{}' \;
答案2
如果您不拘泥于 zip 文件,您可以创建一个可挂载的整个目录树的 squashfs 映像(无需打开并查看特定的 zip 文件来查看其中的内容)。它可能也具有更好的压缩效果,因为它将整个目录树放在一起,更像是一个“实体”档案,而不是许多单独的 zip 文件。
基本上你只需要这个squashfs-tools
包(在 Debian/Ubuntu 中它被这样称呼,在不同的 Linux 家族中可能有不同的名字),然后:
mksquashfs /some/directory archive.squashfs
并挂载/查看/浏览它:
mount archive.squashfs /mnt/mountpoint -t squashfs
-t 标志甚至可以是可选的,mount 非常擅长自动确定类型。-o loop
也不需要该标志,但万一需要的话,请尝试一下。
看http://tldp.org/HOWTO/SquashFS-HOWTO/creatingandusing.html或者直接搜索如何使用 squashfs。