如何在 Linux 下创建与 Windows 兼容的 zip 文件

如何在 Linux 下创建与 Windows 兼容的 zip 文件

我需要让所有 Windows 用户访问者都可以使用一个 zip 文件,因此我天真地使用 Unix zip 命令生成了一个 zip 文件(我们称之为 madeinlinux.zip)。

它可以通过 WinRar 或 Winzip 成功打开,但使用标准 Windows zip 文件处理的用户在尝试解压缩时会失败。(Windows XP)

我使用 Windows 内置的 zip 机制压缩了相同的数据,从 Linux 的角度来看,我看不出文件类型有任何区别:

$ file madeinlinux.zip :  Zip archive data, at least v2.0 to extract
$ file madeinwindows.zip : Zip archive data, at least v2.0 to extract

它们必须是与 Windows 兼容的 zip 文件所特有的内容。

有谁知道是什么吗?

答案1

尝试:

zip -9 -y -r -q file.zip folder/
  • -9表示最慢的压缩速度(最佳压缩,忽略后缀列表)
  • -y将符号链接原封不动地存储在 zip 档案中,而不是压缩并存储链接所引用的文件
  • -r递归遍历目录结构
  • -q静音模式

答案2

7zip是一个开源压缩工具,适用于 Linux、FreeBSD、Mac OS X、BeOS、DOS、Amiga 和 Windows。

我强烈推荐它的 Windows 版本。

它支持

打包/解包:7z、ZIP、GZIP、BZIP2 和 TAR

仅解压:ARJ、CAB、CHM、CPIO、DEB、DMG、HFS、ISO、LZH、LZMA、MSI、NSIS、RAR、RPM、UDF、WIM、XAR 和 Z。

答案3

zip -Z设置压缩选项。-Z store是最简单的一个,因为它根本不压缩。当您使用zip替代tar或进行故障排除时,这很有用。在这种情况下,您应该尝试查看是否可以从 Windows 使用未压缩的存档。如果可用,您知道您必须选择非默认的压缩选项。

答案4

除了其他人的建议之外,注意文件和目录名称很重要因为 Windows 不一定喜欢 Linux 的文件路径和名称。有时在压缩时也会以不同的方式转义它们。例子很多,但最重要的是点文件(. 和 ..)、仅有大小写差异的文件(name.txt 和 NAME.txt)、绝对文件路径(/tmp/file.txt)。Windows 上允许在文件名中使用的其他一些字符可能会导致在使用 Windows 资源管理器打开文件时出现问题。在我的例子中,':' 字符是关键,但花了不少功夫才找出这个问题。

因此,在您恢复使用大量参数之前,我建议遵循一个简单的程序:

  1. 找到您要压缩的文件夹或文件。

  2. 跑步: zip -9 -r -k zip-modified-names.zip /路径/到/你的/文件夹

  3. 注意控制台输出的内容。 就我而言,文件名中的“:”被删除了。
  4. 将 zip 文件移动到 Windows 机器并尝试打开它。

如果此方法有效,您最好从文件/目录名称中删除已被 -k 选项删除的字符,然后尝试正常压缩。 请注意,某些参数(例如 -k)有副作用。 在这种情况下,-k 与 -q 选项相矛盾(对于符号链接)。

此外,-k 选项可能会使文件名不可读。在我的例子中,我的文件是根据创建时间命名的(例如 10:55:39.pdf),以便于从档案中轻松找到所需的记录,但 -k 选项将其变为 105539.pdf,用户不容易读取。因此,我将名称更改为 10_55_39.pdf,该名称在 Windows 上打开时无需使用 -k 选项,但仍然可以读取。

相关内容