以递归方式将目录中的所有文件压缩为单独的 zip 文件...但在单独的目录中

以递归方式将目录中的所有文件压缩为单独的 zip 文件...但在单独的目录中

有人问过类似的问题,但我找不到我想要的。基本上,我有一个包含子目录和许多文件的大目录,我想递归进入每个目录和子目录,并单独压缩每个文件。我找到了这个解决方案,但它不是我想要的:

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

相关内容