如何从 rar 或 tgz 转换为 squashfs 而无需解压到临时文件夹?

如何从 rar 或 tgz 转换为 squashfs 而无需解压到临时文件夹?

我喜欢使用 squashfs 进行压缩,因为将它们安装为循环设备来访问内部文件很简单。

我有很多 rar、tgz 和 zip 文件,我想将它们转换为 squashfs。

这个答案,我发现在将磁盘映像压缩到squashfs时可以使用伪文件,以避免使用整个磁盘大小的临时文件。

mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'

我想使用伪文件以相同的方式(即时)从 rar、tgz 或 zip 转换为 squashfs,因此我不必首先将整个存档提取到磁盘,然后在单独的操作中压缩到 squashfs 。

其中一些档案包含数千个单独的文件,其中一些文件的文件名中包含空格或其他特殊字符。

我在看自述文件,我想我需要使用该-pf <pseudo-file>选项,但我不确定如何动态创建伪文件(并且也不存在带空格的文件名问题)。我想我需要使用进程替换来从源存档创建文件列表。

理想情况下,我希望有一个命令能够转换任何 rar、tgz 或 zip,而不必为每个存档单独创建伪文件,但如果有人可以告诉我如何使用其中一种存档格式来完成此操作,那么希望我能为其他人解决这个问题。

感谢大家。

答案1

您可以使用 或 来安装它们fuse-ziparchivemount然后从安装点创建 squashfs 文件。

例如,这适用于 zip 文件:

$ mkdir /tmp/zmnt
$ fuse-zip -r /path/to/file1.zip /tmp/zmnt
$ mksquashfs /tmp/zmnt /path/to/file1.squashfs
$ fusermount -u /tmp/zmnt

答案2

tar2sqfs来自 https://github.com/AgentD/squashfs-tools-ng/

可能至少是一个值得研究的替代方案。

相关内容