我从客户端收到一个巨大的.tar.gz文件,其中包含约800 mb的图像文件(未压缩时)。我们托管公司的ftp速度非常慢,因此在本地提取所有文件并通过ftp发送它们是不实际的。我可以将.tar.gz文件通过ftp传输到我们的托管站点,但是当我SSH进入目录并尝试使用解压缩时,它给了我这个错误:

[esthers@clients locations]$ unzip community_images.tar.gz
Archive:  community_images.tar.gz
  End-of-central-directory signature not found.  Either this file is not a zipfile, or it constitutes one disk of a multi-part archive.  In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive.
note:  community_images.tar.gz may be a plain executable, not an archive
unzip:  cannot find zipfile directory in one of community_images.tar.gz or community_images.tar.gz.zip, and cannot find community_images.tar.gz.ZIP, period.


我需要使用什么命令来提取.tar.gz文件中的所有文件?

评论

等效堆栈溢出问题。

#1 楼

键入man tar以获取更多信息,但是此命令应该可以解决问题:

tar -xvzf community_images.tar.gz


还可以在特定目录中提取例如

。将存档解压缩到自定义的my_images目录中。

tar -xvzf community_images.tar.gz -C my_images


为了进一步说明,tar将所有文件收集到一个包中,名为community_images.tar。 gzip程序应用了压缩,因此扩展了gz。因此,该命令可以执行以下操作:




f:这必须是命令的最后一个标志,而tar文件必须紧随其后。它告诉tar压缩文件的名称和路径。

z:告诉tar使用gzip解压缩归档文件。

x:tar可以收集或提取文件。 x会做后者。

v:会使tar说话很多。详细的输出显示您正在提取的所有文件。

C:意味着更改到目录DIR。在我们的示例中,DIRmy_images


评论


@Shiki我看到了您建议的编辑。我认为这不是适当的更改,我更喜欢解释此工具的方式。我确实认为您的tar -xf建议将提供一个很好的附加答案。

– djeikyb
2013年12月2日在18:05

这是数百万个类似措词的问题中较好的解释之一

–JohnMerlino
2014年10月5日14:48

@KasunSiyambalapitiya默认情况下,以当前文件夹结尾。另见man tar;寻找-C选项。或者也许看看其他答案😉

– djeikyb
16年11月7日在14:58

让我想起了xckd关于tar的文章。我每次都要回来。

– mgarey
17-10-3在22:25

我的记忆法是:xtract ze v ***文件。

– Agargara
18年4月4日在8:13

#2 楼

如果要将文件提取到特定位置,可以添加-C /destination/path/
确保首先创建目录,在这种情况下:〜/ Pictures / Community

示例:

mkdir ~/Pictures/Community
tar xf community_images.tar.gz -C /home/emmys/Pictures/Community/


如果考虑告诉tar提取文件,则可以轻松记住它。



注意:请记住,您可以在带有? + term的手册页中进行搜索,然后通过nN转到要查找的术语的下一个或上一个实例。

评论


不要忘记C代表“更改目录”!另外,我觉得最好不要混合使用连字符和非连字符(特别是在使用ps时会造成混淆)。

– djeikyb
2014年11月5日23:45

为什么不像其他所有命令一样呢?

– Jan M.
17 Mar 1 '17 at 13:57

我喜欢您的提示“焦油来吸引朋友”

– Nam G VU
17年11月13日在7:11

动画gif为1+

–尼克·斯蒂尔(Nick Steele)
18年9月4日在1:18

也可以使用--directory =“ / home / emmys / Pictures / Community /”(我认为它比-C更容易记住)。

–帕特里克·达克(Patrick Dark)
19年2月20日在8:11

#3 楼

在某个时候,tar已升级为自动解压缩。现在您需要做的是:

tar xf community_images.tar.gz


同样的解释适用于:



f:这必须是命令的最后一个标志,而tar文件必须紧随其后。它告诉tar压缩文件的名称和路径。

x:提取文件。注意命令标志缺少连字符。这是因为大多数tar版本都支持gnu和bsd样式选项(简单地说,gnu需要连字符,而bsd则不需要)。

评论


是否有任何文档?我一直在寻找有关此内容的参考,我从来没有使用-z标志,并且所有内容都被压缩了,所以我一直担心是否根本没有压缩tarball,哈哈。谢谢。

–neurosnap
2015年7月10日4:14



@neurosnap参见gnu手册和bsd手册

– djeikyb
15年7月12日在20:49

编辑原始答案可能会更好。

–赛斯
16年6月9日在18:04

@Seth感到/感到与众不同,足以作为一个单独的答案,尤其是在引起它的破坏性编辑的情况下。不过,下班后我会重新考虑它,这可能是比我最初想象的更简单的合并方式。

– djeikyb
16年6月9日在18:23

@EnricoMariaDeAngelis自2004年以来的bsd tar和自2010年以来的gnu tar支持自动选择解压缩器。 tar的“最新”版本(本世纪90年代?)可能不需要手动选择解压缩器。

– djeikyb
17年6月2日在4:39

#4 楼

记住tar的所有标志可能很乏味。必需的XKCD:



因此,我用Python编写了自己的小脚本。快速,肮脏的cp用法类似:

 #!/usr/bin/env python3
import tarfile,sys,os
tf = tarfile.open(name=sys.argv[1],mode='r:gz')
where = '.'
if len(sys.argv) == 3:
    where = sys.argv[2]
tf.extractall(path=where)
tf.close()
 


按以下方式使用:

myuntar.py archive.tar


另请参见类似的脚本,用于解压缩zip存档。

评论


:)仅记住两个tar标志-caf用于基于文件名创建,-xf用于提取(AFAIK适用于每种类型的tar)。

– Videonauth
18-09-20在7:31

@Videonauth我知道,它并不那么复杂,但是由于某种原因,我不记得这些选项。也许是因为我没有足够频繁地处理档案。

– Sergiy Kolodyazhnyy
18-09-20在7:33

这只会做压缩的tar文件吗? api docs提到了一种使用透明压缩进行读取的模式;那会更像tar xf 吗?

– djeikyb
19年4月13日在4:39

#5 楼

快速解答:
tar -xvf  <.tar file> or <.tar.xz file>
tar -xzvf <.tar.gz file>
tar -xjvf <.tar.bz2 file>


[注意]:


-v详细列出已处理的文件。

-z过滤存档通过gzip。

-f使用存档文件或设备ARCHIVE。

-x从存档中提取文件。

-j bzip2。
tar -xf archive.tar#从archive.tar中提取所有文件。


#6 楼

如果无法使用

tar -xvzf fileName.tar.gz
提取.tar.gz文件,请尝试使用

tar xf fileName.tar.gz
提取

评论


如果它是gzip压缩的tar文件,则第一个命令将始终有效。如果不起作用,则说明您没有压缩过的tar文件。对于那些不在乎tar文件使用什么压缩算法的人,后一个命令是一个很好的建议。

– djeikyb
17 Mar 9 '17 at 2:37

#7 楼

tar xvf file.tar.gz


x表示提取
v表示详细(列表文件)
f表示文件名是下一个

任何远程版本的tar都应自动检测到压缩文件已压缩,并为您添加“ z”。

#8 楼

您也可以在第一步中执行此操作:


gunzip community_images.tar.gz


然后您就拥有了以下文件:community_images.tar

第二步将是:


tar -xvf community_images.tar


* .tar文件将被提取。