gzip: stdin: 不是一个 gzip 格式 tar: 子进程返回状态码 1 tar: 错误不可恢复:现在退出

95

我有一个Bash脚本,它创建了一个.tar.gz文件,加密并将其发送到驱动器。然而,之后我无法打开.tar.gz文件。以下是我的步骤...

加密的Bash脚本。

#!/bin/sh

# Tar the automysqlbackup directory
tar -zcf "red-backup-$(date '+%Y-%m-%d').tar.gz" /var/lib/automysqlbackup/

# Encrypt the tar file
openssl aes-256-cbc -a -salt -in "red-backup-$(date '+%Y-%m-%d').tar.gz" -out "red-backup-$(date '+%Y-%m-%d').tar.gz.enc" -pass 'pass:MySecretPWD'

# Remove the original tar file
rm -rf "red-backup-$(date '+%Y-%m-%d').tar.gz"

# Upload to Google Drive
gdrive upload --file "red-backup-$(date '+%Y-%m-%d').tar.gz.enc" -p "jofhriout849uioejfoiu09"

然后我下载文件并使用

sudo openssl aes-256-cbc -e -in red-backup-2016-09-22.tar.gz.enc -out red-backup-2016-09-22.tar.gz

我现在输入我的文件的密码两次,然后得到一个名为

red-backup-2016-09-22.tar.gz

当我尝试时

sudo tar -zxvf red-backup-2016-09-22.tar.gz

我理解

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now

我也尝试将文件重命名为.tar,还尝试了其他方法

sudo tar xvf red-backup-2016-09-22.tar.gz

sudo tar xvf red-backup-2016-09-22.tar

tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors

我哪里做错了?


11
你可以尝试解包一个没有 z 参数的 tar 文件吗? - Inian
1
没有使用 z 标志时,我会得到相同的错误 stdin: not in gzip format。如果没有同时使用 z 标志和文件名 .tar(没有 .gz),我会得到“ tar: This does not look like a tar archive ”。 - ServerSideSkittles
1
在加密时不要使用 -a 标志(如果需要对数据进行 base64 处理,则在解密时也可以使用该标志),并使用 -d 进行解密,而不是 -e(在上面的示例中,文件被加密了两次)。 - ewcz
@ewcz,按照您所说的方法,去掉-a标志并使用-d,该过程完美地运行了。非常感谢您解决了这个问题。 - ServerSideSkittles
通过安装二进制版本解决了这个问题,请参考此链接。Cassandra 4.0.0不可用,您可以在这里找到4.0.3版本。 - Suraj
9个回答

93

首先使用 file 命令检查压缩类型:

file name_name.tgz
如果输出是“XZ压缩数据”,则使用tar xf <archive name>来解压文件,例如:
  • tar xf archive.tar.xz

  • tar xf archive.tar.gz

  • tar xf archive.tar

  • tar xf archive.tgz


3
file <file_name> 返回 POSIX tar archive (GNU) 时,同样适用。 - Hari
即使我从file <filename>命令中得到与@Hari相同的输出,它对我仍然有效。 - oz19
我不小心使用wget将一个名字令人困惑的HTML页面下载成了tgz格式。这帮助我意识到了这一点。 - combinatorist

84
这意味着该文件实际上并不是一个gzip压缩的tar文件,或者任何类型的gzip文件,尽管它的名称看起来像是一个。
当你使用wget下载一个文件时,请检查是否有类似于“长度:未指定[text/html]”的指示,这表明它是纯文本(text),并且旨在被解释为html。请检查下面的wget输出 -
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz"

--2017-10-12 12:39:40--  http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz
Resolving download.oracle.com (download.oracle.com)... 23.72.136.27, 23.72.136.67
Connecting to download.oracle.com (download.oracle.com)|23.72.136.27|:80... connected.
HTTP request sent, awaiting response... 302 Not Allowed
Location: http://XXXX/FAQs/URLFiltering/ProxyWarning.html [following]
--2017-10-12 12:39:40--  http://XXXX/FAQs/URLFiltering/ProxyWarning.html
Resolving XXXX (XXXXX)... XXX.XX.XX.XXX
Connecting to XXXX (XXXX)|XXX.XX.XX.XXX|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 17121 (17K) [text/html]
Saving to: ‘jdk-8u144-linux-x64.tar.gz’

100%[=========================================================================================================================================================================>] 17,121      --.-K/s   in 0.05s

2017-10-12 12:39:40 (349 KB/s) - ‘jdk-8u144-linux-x64.tar.gz’ saved [17121/17121]

这有点证实了您没有收到一个gzip文件。
对于正确的文件,wget输出将显示类似于下面输出中所示的Length: 185515842 (177M) [application/x-gzip]
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz"

--2017-10-12 12:50:06--  http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz
Resolving download.oracle.com (download.oracle.com)... XX.XXX.XX.XX, XX.XX.XXX.XX
Connecting to download.oracle.com (download.oracle.com)|XX.XX.XXX.XX|:80... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://edelivery.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz [following]
--2017-10-12 12:50:06--  https://edelivery.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz
Resolving edelivery.oracle.com (edelivery.oracle.com)... XXX.XX.XXX.XX, 2600:1404:16:188::2d3e, 2600:1404:16:180::2d3e
Connecting to edelivery.oracle.com (edelivery.oracle.com)|XXX.XX.XX.XXX|:443... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz?AuthParam=1507827127_f44251ebbb44c6e61e7f202677f94afd [following]
--2017-10-12 12:50:07--  http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz?AuthParam=1507827127_f44251ebbb44c6e61
Connecting to download.oracle.com (download.oracle.com)|XX.XX.XXX.XX|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 185515842 (177M) [application/x-gzip]
Saving to: ‘jdk-8u144-linux-x64.tar.gz’

100%[=========================================================================================================================================================================>] 185,515,842 6.60MB/s   in 28s

2017-10-12 12:50:34 (6.43 MB/s) - ‘jdk-8u144-linux-x64.tar.gz’ saved [185515842/185515842]

上面显示正确的 gzip 应用文件已被下载。

您还可以使用 fileheadlessview 工具来检查文件。例如,HTML 文件将产生以下输出 -

head jdk-8u144-linux-x64.tar.gz

输出:

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="/css/print.css" rel="stylesheet" media="print">
    <link href="/css/main.css" rel="stylesheet" media="screen">
    <link href="/css/font-awesome.min.css" rel="stylesheet">

上面显示的确是一个HTML页面,我们试图解压/解包它 - 这是行不通的。如果确实是一个正确的zip文件(二进制的),那么head命令的输出将会产生垃圾数据 - 类似下面这样的东西 -
head jdk-8u144-linux-x64.tar.gz

输出:

x�rY�[ms�F������ڍtіl���DR���Ŋ��j
                                       $�$,`0�h�_����/��=�@Q�w+��ձ*�Hbfz�{�~�{�i�x��k����޾}����z���w����g�����{�޼�;{s����w���⹳�7�N����i�
�����}
�¿g��������ק���7��s�����폺î߹�����~i��j�/�����޿#���=��=>��߿{}��|�������������3���X���]9�ޠ����u�����%ğ�<^)�H�8�F�R�t�o�L�u��S%�ds5�2_EZn�t^��
                                                                                                                                                 �N3��(��<��|'�q���R�N�gq�Uv!�ۻ�p���rL��M��u��.�Q�5�T��BNw�!$��<>�7G'$�,Mt4WY�Gi"�=��p�)�VIN3����\ek��0��G
                                            �<L�c�ē�t-���2���G:Ϣia��I�<ʋg3���d�H����[2`�<I�A�6�W��<��C�������h��A0QL�2�4�-*
�x���Е�t%t1��f�>+A͂�,Lr�
                        �Fe:MBH��ɩ�
C�Q�r�S��<M�b�<,5���@���s��݉c��sp�f�=g��?��k���4�}��kh)�¹Z��#d�*{���-�.N�)�e��s:�H(VQ��3*�$2��rϨv�"o�_��!A�������B�l=A�|��@��0��1��5��4g�
�
���Se����H[2�����t��5�Df����$1���b$� h�Op����!Lvb!p��b�8^�Y���n�
                                                                          O��Ԫ߱��|��lW�lu��*�N�M���
�/�^0~�~�#��q��������K��;�d���aw4����ݎ'�~�7��ky�o���������t�'k��f����!vo���'o���     �.�Pn\�
               �+��K"FA{����n2����v��!/Ok��r4�c5�x$'�.�&w�!�%�ޠo������2���i
                                                                               �a0��Ag�d����GH)G7~�g���b��%�b��rt�m~�    �����t0��    <������������5�q�t��K(��+Z<��=���:1�\�x�p=t�`��G@F��    i�����p8�����H.���dMLE��e[�`�'n��*h[��;�0w'��6A�١M�x�fpeB>&���MO�������`�@á/�"�����(��^���n��=����5��@�Mx��d:\YAn���]|�w>��S��FA9�J�k!�@�

尝试从官方网站下载,并检查他们的下载链接是否已更改。还要检查您的代理设置,并确保启用了正确的代理以从正确的来源下载/wget


谢谢,这正是我在寻找的内容。我一直在尝试使用wget下载jdk,但没有注意到需要授权码才能下载,实际上只是在下载html页面。 - Aditya T
1
通过Chrome下载JDK的一种方法是像普通文件一样下载它,然后从下载中获取URL链接。在远程机器上执行wget <URL>命令,你会看到一个类似jdk-9.0.4_linux-x64_bin.tar.gz?AuthParam=1520...的文件,只需解压即可。 - karthik101
对我来说,我不小心下载了一个HTML页面,所以这个答案帮助我确认了它。但由于投票数已经到了69,我无法进行赞同。 - Ayudh

29

先点击那个链接,进入HTML页面,里面有实际的下载链接或镜像。

完整链接以.tgz结尾,但实际上会跳转到一个HTML页面,里面才是真正的下载链接,这很容易引起误解。

我在下载Apache Spark并将其WgetUbuntu时遇到了这个问题。

https://spark.apache.org/downloads.html

3
当我下载最新版本的Spark时,遇到了同样的问题。很高兴看到这条评论,它帮助我解决了这个问题。 - Saurabh Jain
同时,在选择下载Spark后,它会引导您到此页面:https://www.apache.org/dyn/closer.lua/spark/spark-2.3.4/spark-2.3.4-bin-hadoop2.7.tgz,在那里您可以找到Spark的镜像链接(不要总是检查URL名称)。 - Rohit Chauhan
详细说明一下。 - Mohammad Heydari
@MohammadHeydari 当你在浏览器的地址栏中有一个链接,它以.../htmlpage.pdf结尾,这并不意味着它真的是PDF文件 - 它可能只是另一个HTML页面。 - Hrvoje

11

首先,使用以下命令检查压缩类型:

`file <file_name>`

如果输出是一个POSIX压缩文件,则使用以下命令进行解压缩:
`tar xvf <file_name>`

1
有时候文件名会错误地附加上.gz扩展名。
  • 运行命令file foo.csv.gz来了解实际的文件类型。
  • 将文件重命名为foo.csv或实际的文件类型。

0
在wget命令的末尾添加"-O file.tgz""-O file.tar.gz",并提取"file.tgz""file.tar.gz"
以下是Google Colaboratory的示例代码:
!wget -q  --trust-server-names  https://downloads.apache.org/spark/spark-3.0.0/spark-3.0.0-bin-hadoop2.7.tgz  -O file.tgz
print("Download completed successfully !!!")
!tar zxvf  file.tgz

请注意:请确保tgz的http路径有效且文件未损坏。

-1

unxz 对我有用:

sudo unxz fileName.xz

-2
cd /Whatever/Directory/Path/The/File/Is/In

chmod +x xampp-linux-x64-7.0.6-0-installer.run

sudo ./xampp-linux-x64-7.0.6-0-installer.run

它可以工作。

如需更多信息,请参考在Linux Mint上安装XAMPP


2
这与使用tar和openssl创建的归档文件有什么关系呢?您的.run归档文件是使用一种名为shar的工具创建的,这与本问题所涉及的工具完全不同,也不兼容。 - Charles Duffy

-15

这可能是因为你的gzip版本不兼容。

首先检查以下几点:

which gzip

/usr/bin/gzip 或 /bin/gzip

应该是 /bin/gzip 或者 /usr/bin/gzip。如果你的gzip指向其他的gzip应用程序,请尝试从你的PATH环境变量中删除该路径。

接下来是

gzip -V

gzip 1.3.5 (2002-09-30)

通过这些检查点,你的问题可以得到解决。


8
我的指向是 /bin/gzip,但我仍然遇到这个问题。 - IgorGanapolsky
3
我有相同的/bin/gzip,而且gzip -V的输出是gzip 1.5,面临着相同的问题。 - Devganiya Hitesh
6
我有同样的/bin/gzip,并且gzip -V显示gzip 1.6,遇到了相同的问题...有解决方法吗? - clifford_owino
1
我有相同的/bin/gzip,而gzip -V是gzip 1.6,遇到了相同的问题。 - andani
我有相同的gzip路径,但仍然存在相同的问题。 - emilpmp
1
@Roopendra,您能否记录任何一种情况,在该情况下,一个已发布的gzip版本会对另一个已发布的gzip创建的存档失败并显示“不在gzip格式中”的错误?我想不出有一种情况可以正确回答这个问题。 - Charles Duffy

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