我收到了在嵌入式 Linux 设备上创建的 Tar/GZipped 文件。
如果我运行类似下面的命令,就可以在 Linux 桌面上完美地提取文件tar zxf myFile.tgz
。文件提取后的内容如下
dir1/
file1
file2
dir2/
file1
file2
subdir1/
file1
...但我怀疑具体的文件内容和布局无关紧要。
当我尝试在 Windows 中提取同一个文件(使用 7-Zip 或 WinZip)时,我得到:
myFile/
<extensionless file with temp-looking name e.g. "logs_xqUt09">
myFile
当我收到的.tgz
是本身命名myFile.tgz
……但我不能确定这是否只是巧合。
我浏览了一下 SuperUser,发现了一些相关问题,其中一个问题表明7-Zip处理.tgz
文件比 WinZip 更好,但显然在这种情况下并非如此。
有人知道发生了什么吗?为什么.tgz
在 Linux 下可以完全提取,但在 Windows 下却不行?可能有什么解决方法?
如果我将该无扩展名的文件重命名为一个.tar
文件,那么那 .tar
文件可以使用 7-Zip 和/或 WinZip 提取。
我仍然想了解发生了什么,以及是否有一种不涉及手动文件重命名的解决方法,因为理想情况下,.tgz
嵌入式设备传送的原始文件应该可以在 Linux 和 Windows 下提取。
答案1
tgz (tar.gz) 是一个两级档案。首先,文件流被保存为 tar。其次,tar 文件用 gzip 压缩。如果您提取 gzip 文件,您将始终得到一个文件 - 在 7-zip 的情况下,该文件没有扩展名,并且具有临时名称。这个文件可以用 tar 或再次用 7-zip 解压。
除了 tar 流包含文件权限、组 ID + 用户 ID、xattrs 或 selinux 上下文(以及可能的符号链接)等元数据之外,这些元数据在 Windows 文件系统中会丢失,解压 Linux 文件可能会失败或导致麻烦,因为文件名中的 ascii 字符集(/
Linux 中允许的字符除外)。通常将 tar 存档提取到 Windows 磁盘是没有意义的
答案2
为什么?
因为微软还没有/还未将其内置。
仅当向操作系统添加必要的指令以告诉其如何处理文件时,操作系统才会支持文件类型。
.tag.gz 在 *nix 系统中有着悠久的使用历史,但 .zip 和其他软件包在 Windows 中更受欢迎,因此在 Windows 中并没有真正需要支持这些软件包类型。
除此之外,我们无法回答任何问题,因为我们不是编写 Windows 的人。
答案3
完全.tgz
可以在 Linux 系统上提取,因为tar
它是由 AT&T 贝尔实验室专门为 Unix 和类 Unix 操作系统构建的。并且gzip
只是一种在tar
开发多年后才开发的压缩算法。
同样的道理也适用于在一个操作系统上受支持但在另一个操作系统上不受支持的所有其他文件扩展名。例如,您不能.dmg
在 Windows 上使用文件,也不能.msi
在 macOS 上使用。
大多数人tar.gz
在 Linux/Unix 上选择此选项,因为tar
它存储了 Unix 文件属性和权限,并整合了所有要存档的文件。然后gzip
用于压缩。
该zip
选项存储 MSDOS 文件属性,然后单独压缩每个文件,然后将每个单独的文件合并为一个文件。
根据您的情况,您可以使用命令,而不是在嵌入式设备上对文件进行去皮和 gzip 压缩zip
。