【问题标题】:GZip an entire directoryGZip 整个目录
【发布时间】:2020-05-25 16:46:28
【问题描述】:

我使用了以下内容:

gzip -9 -c -r <some_directory> > directory.gz

如何解压这个目录?

我试过了

gunzip directory.gz  

我只剩下一个文件而不是目录结构。

【问题讨论】:

  • 哇,我刚试过。看来您的directory.gz 中有所有文件,连接然后压缩。有多少文件,它们重要吗?
  • 如果你执行gzip -l directory.gz,你可以看到zip文件中所有文件和目录的列表
  • 有没有办法让他们回来?它们有些重要。
  • 为了将来参考,您想使用 tar、zip、7z 或其他一些容器格式将多个文件捆绑在一起。

标签: linux gzip


【解决方案1】:

正如其他人已经提到的,gzip 是一种文件 压缩工具,而不是存档工具。它不能与目录一起使用。当您使用-r 运行它时,它将查找目录层次结构中的所有文件并压缩它们,即将path/to/file 替换为path/to/file.gz。当您传递-c 时,gzip 输出将写入标准输出,而不是创建文件。您已经有效地创建了一个包含多个 gzip 压缩文件的大文件。

现在,您可以查找 gzip 文件头/幻数,即1f8b,然后手动重建您的文件。

现在明智的做法是创建备份(如果您还没有)。备份总是有帮助的(尤其是像你这样的问题)。 现在为您的directory.gz 文件创建一个备份。然后继续阅读。

幸运的是,有一种比手动重建所有文件更简单的方法:使用binwalk,这是一种取证实用程序,可用于从其他文件中提取文件。我尝试了一个测试文件,该文件的创建方式与您的相同。运行binwalk -e file.gz 将创建一个包含所有提取文件的文件夹。它甚至设法重建原始文件名。目录的层次结构可能会丢失。但至少你有你的文件内容和他们的名字回来了。祝你好运!

记住:备份是必不可少的。

(为了完整起见:您可能打算运行的内容:tar czf directory.tar.gz directory 然后tar xf directory.tar.gz

【讨论】:

  • 很有趣,谢谢。似乎运行gunzip directory.gz 只会导致原始文件的串联,而没有任何额外的元数据。我之前从这个事实错误地得出结论,directory.gz 必须只包含连接然后压缩的文件,但你是正确的,实际上它包含单独 gzip 压缩然后在 gzip 之后连接的文件,因此它包含每个文件的 gzip 标头文件。不幸的是,OP 建议他们在提出问题之前已经完成了gunzip directory.gz,因此可能已经销毁了这些标头。
【解决方案2】:

gzip 将压缩 1+ 个文件,但并不意味着像存档实用程序那样运行。发布的 cmd-line 将产生 N 个压缩文件图像连接到标准输出,重定向到指定的输出文件;不幸的是,文件名和任何目录之类的东西都不会被记录下来。像这样的一对应该可以工作:

(创建)

tar -czvf dir.tar.gz <some-dir>

(摘录)

tar -xzvf dir.tar.gz

【讨论】:

    猜你喜欢
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多