当然,在提取时,除非您使用相同的实现,否则您将获得容器——而不是稀疏文件。至少可以说,这可能会让用户感到有些惊讶,并且打破了“可移植性”的概念(即,在任何具有 any 的机器上,输入的数据就是输出的数据)tar。还要注意这里的接口设计得有多糟糕xsparse;您应该知道原始的稀疏文件名,并且必须手动查找它:/。
可能有人解压缩了这样一个包含这样一个稀疏文件容器的 GNUtar文件,然后清理了他们期望在该存档中的文件(可能通过以不同于 tar 存档的方式到达他们的文件列表) . 他们期待原始文件——然后在清理过程中可能找不到——而不是稀疏容器,所以对他们来说,稀疏容器似乎不是来自他们解压的文件,他们忽略了它。
我以前被这个咬过。
你是正确的。GNU
tar
的手册试图向您兜售一个谎言:他们声称已经找到一种可移植的方式来存档稀疏文件,而无需将稀疏区域扩展为零。您可以使用任何
tar
.现在,tar 格式没有选项来指定诸如“A 中的区域为零并且在提取时表示为稀疏”之类的内容。所以,他们做了什么,而不是在文件头中添加一些东西(老实说那里没有太多空间)来解决这个问题(如果他们不能解包,让解包器通知用户),或者将压缩实际集成到他们的文件中
tar
工具而不是通过管道传输数据gzip
或类似工具,是他们发明了一种新的数据结构,contianer,它首先包含文件稀疏区域的映射,以及该文件的非稀疏其余部分。然后,当您使用 GNU tar 并告诉它保留稀疏性时,他们会归档这样一个“伪稀疏容器”。
当然,在提取时,除非您使用相同的实现,否则您将获得容器——而不是稀疏文件。至少可以说,这可能会让用户感到有些惊讶,并且打破了“可移植性”的概念(即,在任何具有 any 的机器上,输入的数据就是输出的数据)
tar
。还要注意这里的接口设计得有多糟糕xsparse
;您应该知道原始的稀疏文件名,并且必须手动查找它:/。可能有人解压缩了这样一个包含这样一个稀疏文件容器的 GNU
tar
文件,然后清理了他们期望在该存档中的文件(可能通过以不同于 tar 存档的方式到达他们的文件列表) . 他们期待原始文件——然后在清理过程中可能找不到——而不是稀疏容器,所以对他们来说,稀疏容器似乎不是来自他们解压的文件,他们忽略了它。所以,这就是您在这里得到的:来自 GNU
tar
创建的 TAR 的东西,并且从未从其容器中最终解压。