解压结果是文件,而不是文件夹

解压结果是文件,而不是文件夹

我在服务器 A 上使用 压缩了 6 个文件(总大小 = 2gb)gzip -c myfiles_* > ~/myzip.gzip,并让我的朋友将此服务器复制到服务器 B。现在我了解到该文件应该被命名,.gz所以我使用 重命名了该文件mv。我检查了服务器 B 上的文件是否与.gzip服务器 A 上的原始文件大小相同,事实确实如此。然后我运行了gunzip myzip.gz

结果不是包含我的文件的文件夹,而是一个myfiles没有任何扩展名的单个文件。文件的大小与初始文件的大小相同,因此所有文件都已编译到这个单个文件中。我现在如何从这个单个文件再次提取文件?

正如您所知,我对 Linux 还很陌生。

答案1

我使用 压缩了 6 个文件(总大小 = 2gb)gzip -c myfiles_* > ~/myzip.gzip,并让我的朋友将此服务器复制到另一台服务器。现在我了解到存档应该命名,.gz所以我使用 重命名了文件mv。然后我运行了gunzip myzip.gz

您看到的结果正是您创建的结果。GZip 在压缩时不保留任何目录结构;它只压缩文件/数据。因此,当您运行此命令时:

gzip -c myfiles_* > ~/myzip.gzip

GZip 所做的就是将它找到的所有文件连接到myfiles_*一个大文件块中,然后将它们压缩为~/myzip.gzip。文件扩展名不正确这一事实并不重要,因为只需重命名该文件(就像您所做的那样)即可解决问题,但底层存档仍然只是一大堆文件。

那么现在如何恢复呢?我确信你无法恢复,因为问题出在你最初的 GZip 逻辑上。我现在给你的唯一建议是从头开始,创建一个像这样的 TAR/GZipped 存档。

创建 TAR/GZipped 文件。

首先,运行此 TAR 命令:

tar -cf myzip.tar myfiles_*

这将创建一个名为 的新 TAR 档案,myzip.tar其中包含系统使用模式找到的文件myfiles_*

现在完成后,您可以像这样对该 TAR 存档进行 GZip 压缩:

gzip myzip.tar

这是我在 Mac OS X 中处理这些内容的过程,但如果您使用的是 GNU 版本的 TAR(大多数 Linux 系统都使用),您可以运行此命令将两个步骤合并为一个:

tar -cfz myzip.tar.gz

注意到z选项中的 extra 了吗?它告诉 TAR 在创建档案时对其进行 GZip 压缩。

解压缩并解压 TAR/GZipped 文件。

完成后,您将获得一个名为 的新档案myzip.tar.gz。将其转移到您需要的任意位置,然后使用 TAR 命令将其解压缩,如下所示:

tar -xf myzip.tar.gz

TAR 现在足够智能,可以在解压过程中检测 GZip 压缩,因此它将解压 TAR 档案,然后将该 TAR 档案的内容提取回原位,以完全匹配源的文件和目录结构。

相关内容