解压缩.tar.gz文件需要什么命令?


829

我从客户端收到一个巨大的.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文件中的所有文件?

Answers:


1390

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

tar -xvzf community_images.tar.gz

为了进一步解释,tar将所有文件收集到一个包中community_images.tar。gzip程序应用了压缩,因此进行了gz扩展。因此,该命令做了两件事:

  • f:这必须是命令的最后一个标志,而焦油˚F ILE后必须立即进行。它告诉tar压缩文件的名称和路径。
  • z:告诉tar使用g z ip 解压缩档案
  • x:焦油可以收集文件或E X道他们。x后者。
  • v:使tar说话很多。V erbose输出显示你所提取的所有文件。

5
@Shiki我看到了您建议的编辑。我认为这不是适当的更改,我更喜欢解释此工具的方式。我确实认为您的tar -xf建议会带来很多其他答案。
djeikyb

3
这是数百万个类似措词的问题中的更好解释之一
JohnMerlino 2014年

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

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

19
我给这记忆是:Xž ë v *** ING集团˚F尔斯。
Agargara

172

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

例:

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

您可以轻松地记住它,如果你考虑告知焦油到e X道一˚F ILE

终端完成的过程的gif

注意:请记住,您可以man页面内搜索与?+长期寻找,再nN去你正在寻找这个词的下一个或下一个实例。


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

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

6
我喜欢您的提示“焦油来吸引一个文件”
Nam G VU

2
动画gif的1+
Nick Steele

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

107

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

tar xf community_images.tar.gz

相同的解释适用:

  • f:这必须是命令的最后一个标志,而焦油˚F ILE后必须立即进行。它告诉tar压缩文件的名称和路径。
  • x:电子X道的文件。

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


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

2
@neurosnap参见gnu手册bsd手册
djeikyb

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

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

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

11

记住所有标志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存档的类似脚本


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

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

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

7

快速回答:

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 -xfarchive.tar#从中提取所有文件archive.tar

4

如果您无法.tar.gz使用以下命令提取文件

tar -xvzf fileName.tar.gz

尝试使用提取

tar xf fileName.tar.gz

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

0

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

gunzip community_images.tar.gz

然后,您将得到以下文件:community_images.tar

第二步将是:

焦油-xvf community_images.tar

并且* .tar文件将被提取。


0

tar xvf file.tar.gz

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.