我在服务器 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 档案的内容提取回原位,以完全匹配源的文件和目录结构。