【问题标题】:gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting nowgzip:标准输入:不是 gzip 格式 tar:子返回状态 1 tar:错误不可恢复:现在退出
【发布时间】:2017-01-31 06:22:54
【问题描述】:

我有一个 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
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
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

任何想法我哪里出错了?

【问题讨论】:

  • 你可以尝试在没有z 的情况下解压 tar 吗?
  • 没有 z 标志我得到相同的错误标准输入:不是 gzip 格式。如果没有 z 标志和文件名 .tar(没有 .gz),我会得到“tar:这看起来不像 tar 存档”
  • 在加密期间省略-a标志(或者如果您需要base64处理数据,也可以在解密期间使用它)并使用-d解密,而不是-e(在上面的示例中,文件被加密了两次)
  • @ewcz 如您所说,删除 -a 标志并使用 -d 后,该过程完美无缺。非常感谢您解决问题。

标签: linux bash gzip tar


【解决方案1】:

这意味着该文件实际上不是 gzip 压缩的 tar 文件——或任何类型的 gzip 压缩文件——尽管名称类似。

当您下载带有wget 的文件时,请检查诸如Length: unspecified [text/html] 之类的指示,该指示表明它是纯文本(文本)并且它旨在被解释为html。检查下面的wget 输出 -

[root@XXXXX opt]# 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] 的内容,如下面的输出所示 -

[root@txcdtl01ss270n opt]# 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 文件会给出以下输出 -

[root@XXXXXX opt]# 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 的输出会产生垃圾 - 如下所示 -

[root@XXXX opt]# 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 页面。
  • wget下载jdk的一种方法是像普通文件一样用chrome下载它,然后从下载中获取url链接。在远程机器上执行 wget 。你会看到一个类似 jdk-9.0.4_linux-x64_bin.tar.gz?AuthParam=1520.... 的文件。
  • 对我来说,我偶然下载了一个 html 页面,所以答案帮助我确认了它。我不能投票,因为它有 69 票
【解决方案2】:

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

file name_name.tgz

O/P- 如果输出是“XZ 压缩数据”

然后使用tar xf &lt;archive name&gt;解压文件,例如

  • tar xf archive.tar.xz

  • tar xf archive.tar.gz

  • tar xf archive.tar

  • tar xf archive.tgz

【讨论】:

  • file &lt;file_name&gt;返回POSIX tar archive (GNU)时同样适用。
【解决方案3】:

只需首先单击该链接并转到实际下载或镜像所在的 HTML 页面。

当它实际上指向真正的下载链接所在的 HTML 页面时,具有以 .tgz 结尾的完整链接确实具有误导性。 我在下载 Apache Spark 并将其 wget-ing 到 Ubuntu 时遇到了这个问题。

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

【讨论】:

  • 我在下载最新版本的 spark 时遇到了同样的问题。很高兴看到这条评论,帮助我解决了这个问题。
  • 同样在选择下载spark后,会跳转到这个页面..apache.org/dyn/closer.lua/spark/spark-2.3.4/…,在那里你可以找到spark的镜像链接(不要总是检查URL名称)
  • 请详细说明
  • @MohammadHeydari 例如,当您在浏览器中的地址栏中有以 .../htmlpage.pdf 结尾的链接时,这并不意味着它后面真的是 pdf 文件 - 它可能是只是另一个 HTML 页面。
【解决方案4】:

首先,使用以下命令检查压缩类型: file &lt;file_name&gt; 如果输出是 Posix 压缩文件,请使用以下命令解压缩: tar xvf &lt;file_name&gt;

【讨论】:

    【解决方案5】:

    有时.gz 扩展名被错误地附加到文件名中。

    • 运行file foo.csv.gz以了解实际文件类型。
    • 将文件重命名为 foo.csv 或任何实际文件类型。

    【讨论】:

      【解决方案6】:
      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
      

      有效

      有关详细信息,请参阅 https://forums.linuxmint.com/viewtopic.php?t=223639

      【讨论】:

      • 这与关于使用 tar 和 openssl 创建的存档的问题有什么关系?您的 .run 存档是使用 shar 风格的工具创建的,该工具与本问题所问的工具完全不同且不兼容。
      【解决方案7】:

      在 wget 命令末尾添加 "-O file.tgz""-O file.tar.gz" 并解压 "file.tgz" “file.tar.gz”

      这是google colab的示例代码-

      !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 路径有效且文件未损坏

      【讨论】:

        【解决方案8】:

        UNXZ 为我工作

        sudo unxz fileName.xz
        

        【讨论】:

          【解决方案9】:

          sudo tar -xvzf ./PhpStorm-2018.3.4.tar.gz

          【讨论】:

          • 只有代码的答案通常被认为是低质量的。在 Stack Overflow 上添加一个关于为什么你的解决方案应该起作用的解释是一种很好的做法。欲了解更多信息,请阅读How To Answer。在你的答案中也使用降价
          • 如果问题是需要使用 sudo,结果将是权限被拒绝错误,而不是文件格式错误的错误。
          【解决方案10】:

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

          先检查这几点:

          哪个压缩包

          /usr/bin/gzip 或 /bin/gzip

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

          接下来是

          gzip -V

          gzip 1.3.5 (2002-09-30)

          这些检查点可以解决您的问题。

          【讨论】:

          • 我的指向 /bin/gzip,我仍然有这个问题。
          • 我有相同的 /bin/gzip 和 gzip -V 是 gzip 1.5,面临同样的问题。
          • 我有相同的 /bin/gzip 和 gzip -V 是 gzip 1.6,面临同样的问题...任何解决方案?
          • 我有相同的 /bin/gzip 和 gzip -V 是 gzip 1.6,面临同样的问题
          • @Roopendra,您能否记录下一个已发布版本的 gzip 将失败并出现“非 gzip 格式”错误的任何情况?我想不出这个答案可能是正确的任何一种情况。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-17
          • 2017-10-07
          • 1970-01-01
          • 2012-09-24
          • 1970-01-01
          • 1970-01-01
          • 2013-08-02
          相关资源
          最近更新 更多