我在 .tar.gz 存档中有大量文件。使用命令检查文件类型
file SMS.tar.gz
给出回应
gzip compressed data - deflate method , max compression
当我尝试使用 gunzip 提取存档时,延迟后我收到了消息
gunzip: SMS.tar.gz: unexpected end of file
有什么方法可以恢复部分存档吗?
恢复是可能的,但这取决于导致损坏的原因。
如果文件只是被截断,得到一些部分结果并不难;赶紧跑
gunzip < SMS.tar.gz > SMS.tar.partial
尽管最后出现错误,这将给出一些输出。
如果压缩后的文件有较大的缺失块,那么在坏块之后基本上是没救了。
如果压缩文件被系统性地损坏(例如以 ASCII 模式传输二进制文件,这会破坏整个文件的回车符和换行符),则可以恢复,但需要相当多的自定义编程,这真的很值得如果您绝对没有其他资源(没有备份)并且数据值得付出很多努力。(我已经成功完成了。)我在上一个问题中提到了这种情况。
.zip 文件的答案有些不同,因为 zip 档案有多个单独压缩的成员,所以希望更大(尽管大多数商业工具相当虚假,它们通过修补 CRC 来消除警告,而不是通过恢复良好数据)。但是您的问题是关于 .tar.gz 文件,这是一个包含一个大成员的档案。
你确定它是一个gzip文件吗?我将首先运行“文件 SMS.tar.gz”来验证这一点。
然后我会阅读The gzip Recovery Toolkit页面。
这是我们遇到的一种可能的情况。我们有一个无法解压缩的 tar.gz 文件,尝试解压缩时出现错误:
gzip -d A.tar.gz
gzip: A.tar.gz: invalid compressed data--format violated
我发现该文件最初可能是通过非二进制 ftp 连接上传的(我们不确定)。
使用 unixdos2unix
实用程序的解决方案相对简单
dos2unix A.tar.gz
dos2unix: converting file A.tar.gz to UNIX format ...
tar -xvf A.tar
file1.txt
file2.txt
....etc.
有效!这是一种渺茫的可能性,也许值得一试——它可能会帮助那里的人。