如何将未压缩的文件夹视为压缩文件?

Posted

技术标签:

【中文标题】如何将未压缩的文件夹视为压缩文件?【英文标题】:How to treat uncompressed folder as compressed file? 【发布时间】:2012-02-13 06:08:10 【问题描述】:

我们都知道用于将压缩文件视为文件夹的第三方工具或操作系统内置工具。但是有谁知道如何做相反的事情:欺骗操作系统认为包含一些文件的标准文件夹实际上是一个压缩文件?正在寻求适用于 Windows、Linux 和 Mac 的解决方案(尽管我意识到没有一种解决方案可以在所有这些平台上运行)。

问题的背景是让源代码版本控制系统(如 SVN、Git 或 Mercurial)更有效地存储实际上是压缩文件夹的文档版本之间的差异(保存各种 XML 文件、一些元数据和一个缩略图或两个),例如 ODT 和 DOCX。

我已经知道 Zipdoc 和类似的实用程序,它们使用 Git 和 Mercurial 编码/解码钩子来将数据转换进出存储库。这是解决问题的好方法,但我发现自己想浏览包含文档未压缩文件夹内容的存储库,并单独比较其中的文件。

这意味着必须将未压缩的内容添加到存储库,而不是文档的 tar'd 或 zipped-without-compression 版本。这反过来意味着从存储库中签出会生成一个未压缩的文件夹,其中包含代表文档的文件。这就是我最初的问题。

我设想的神话产品会检测名称包含“已注册”扩展名(例如“docx”)的文件夹,然后将其“重新挂载”为同名的压缩文件。

另外,有谁知道如何利用 Git/Mercurial 编码/解码钩子来实现这个梦想?

【问题讨论】:

我一定是误解了你,因为我不明白你为什么需要欺骗操作系统认为文件夹已被压缩。为什么不在 repo 中包含常规的未压缩目录(没有特殊扩展名),让操作系统认为它是未压缩的。因为它是。 这个问题很笼统。如果你能更具体一些,你可能会得到更好的回应。 @BenLee:因此,双击“重新解释”文件将为该类型/扩展名的文件打开相应的注册应用程序。我在这里描绘了一个驾驶员级别的设施。 一个驱动程序级工具:现在让我意识到,当需要将修改提交回存储库时,Mercurial(或 Git)无法判断它真的是一个文件夹。哦,好吧,我还是想知道你是否可以让一个文件夹在操作系统中显示为一个压缩文件。 即使它是“驱动程序级别”,我也可以想象某种方式,比如用户界面中的右键单击上下文菜单,在提交之前将文件卸载回普通文件夹回购。 【参考方案1】:

要以一种很好的方式解决这个问题,您可以使用带有 nsmux 的 Hurd 翻译器 - 尽管更改内核可能是一大步:)

→http://www.gnu.org/software/hurd/hurd/translator/nsmux.html

您也许可以调整 tarfs 翻译器。这将允许您通过folder,,zip 打开文件夹。

但这需要相当多的工作。

(这是一个很好的例子,一个非常简单的用例指向一个相当复杂的问题)

【讨论】:

【参考方案2】:

这个程序可以帮助你:

https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe

源代码:

https://bitbucket.org/htilabs/ooxmlunpack

您必须配置此程序将处理所有文件的路径。 执行程序后会

解压所有office文件(xlsx, xlsm, docx, ...) 再次压缩而不压缩(=TAR 球)

毕竟您拥有“相同”的文件,现在需要更多磁盘空间(但仍可使用 Word/Excel)。但是在这种状态下,这些文件的更改只需要存储库中的最少磁盘空间(因为它们不再是“二进制”)。 作为废品,您也有提取的内容,必要时可以删除。

另见Version-controlling zipped files (docx, odt)

【讨论】:

以上是关于如何将未压缩的文件夹视为压缩文件?的主要内容,如果未能解决你的问题,请参考以下文章

Solid Compression

Solid Compression

如何压缩文件到最小

如何把一个压缩好的文件,拆分成几个压缩文件?

如何向 Web 服务器发出我正在发布 gzip 压缩数据的信号?

如何将文件压缩到最小容量?