压缩整个目录的GZip

4

我使用了以下内容:

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

如何解压这个目录?

我已经尝试过

gunzip directory.gz  

我只剩下了一个文件,而没有目录结构。


哇,我刚试了一下。看起来你把所有文件都连接起来然后压缩到了directory.gz里面。有多少个文件?它们很重要吗? - peterh
如果你执行 gzip -l directory.gz,你可以看到压缩文件中所有文件和目录的列表。 - dkb
1
有没有办法把它们找回来?它们有点重要。 - user1772250
请看这个链接:https://unix.stackexchange.com/a/93158/109344 - dkb
1
为了以后的参考,您需要使用tar、zip、7z或其他容器格式来捆绑多个文件。 - Shawn
2个回答

3

正如其他人已经提到的,gzip是一个文件压缩工具,而不是一个归档工具。它无法处理目录。当您使用-r运行它时,它将在目录层次结构中找到所有文件并对它们进行压缩,即用path/to/file.gz替换path/to/file。当您传递-c时,gzip输出被写入stdout而不是创建文件。您实际上创建了一个包含多个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 头。不幸的是,OP 表示他们已经在提问之前完成了 gunzip directory.gz,因此可能已经销毁了这些头部信息。 - alani

1

gzip可以压缩一个或多个文件,但并不像归档工具一样使用。发布的命令行会生成N个压缩文件映像,这些映像被连接到标准输出,然后重定向到指定的输出文件;不幸的是,文件名和任何目录之类的信息都不会被记录下来。以下这对命令应该可以正常工作:

(创建)

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

(提取)

tar -xzvf dir.tar.gz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接