Untar,ungz,gz,tar-您如何记住所有有用的选项?


76

我可以肯定,我不是唯一一个存在以下问题的人:每次我需要在* nix中解压缩文件时,我都不记得所有的开关了,最终对其进行了谷歌搜索,这令人惊讶地考虑到我需要多久进行一次做这个。

你有一个好的压缩备忘单吗?或为tar中所有这些令人讨厌的开关提供助记符?

我将这篇文章做成Wiki,以便我们在这里创建一个不错的备忘单。

哦,关于手册页:有没有一件事对他们没有帮助,那是为了弄清楚如何解压缩文件。


1
使用手册页,则无需创建Wiki,而只需记住man命令:-) man(1)
Florenz Kley

9
eXtract Zee文件是我记得的方式
加拿大卢克,

创建Zee Vocking文件可能适合于创建.tar.gz
CousinCocaine 2013年

Answers:


65

或者如何使用具有高级完成功能(如zsh或bash的新版本)的shell,它将在全面的帮助下为您完成这些选项?:))

关于tar:只需查看“ qwerty”键盘即可。彼此之间有字母“ zxcvf”。您需要“ tar czvf file.tar.gz文件”或“ tar xzvf file.tar.gz”。


实际回答问题的道具:)

现在,这是一个很酷的“ qwerty”技巧!:)

太棒了!
deadprogrammer,

2
另一个提示是,使用现代版本的tar提取时,不需要该z选项(或文件j选项.bz2)。它会自动解压缩文件。
Nate

10
我已经使用了大约一百亿次tar,却从未注意到所有最常用的选项在键盘上都紧挨着。头疼
泰勒·麦克亨利

41

焦油选项摘要

大家都欢迎对其进行编辑以添加更多深奥的开关,但这是基础知识:

  • x-提取文件
  • c-创建档案
  • t-列出文件
  • v-详细(在处理文件时列出文件)
  • j-使用bz2压缩
  • z-使用gz压缩
  • f-读取或写入磁盘文件

例子

解压缩tar.gz文件:tar zxf tarball.tar.gz

解压缩tar.bz2文件:tar jxf tarball.tar.bz2

创建一个tar.gz文件:tar zcvf tarvall.tar.gz mydir / *


23

有一个小的Perl脚本叫做“ unp”。

unp filename.tar.gz

...然后提取所有内容。只要您拥有正确的二进制文件,就可以与任何压缩文件一起使用。而您只是忘记了语法或其他任何废话。检查Linux发行版的存储库。它应该在那里(至少在Arch,Debian和Ubuntu上)。


即使在使用tar了很长时间之后,我仍然需要在Google上搜索愚蠢的标志。unp是必经之路。
亚达

8

确实经常使用,所以我在提取(x)数据和压缩(c)数据之间有所不同:

提取:

tar xzf data.tgz

压缩:

tar czf data.tgz

此外,您也可以在.bashrc中添加两个功能:

function extract () {     
        if ($# -ne 1); then
                echo "Usage: $0  `<compressed archive>"`
                exit 1
        fi
        tar xzf $1
}

function compress () {
        if ($# -ne 2); then
                echo "Usage: $0 `<compressed archive> <files|directories>"`
                exit 1
        fi
        tar czf $1 $2
}

还有另一个不错的提取功能,它可以检测压缩文件的扩展名并为您完成工作:

extract () {
   if [ -f $1 ] ; then
       case $1 in
           *.tar.bz2)   tar xvjf $1    ;;
           *.tar.gz)    tar xvzf $1    ;;
           *.bz2)       bunzip2 $1     ;;
           *.rar)       unrar x $1       ;;
           *.gz)        gunzip $1      ;;
           *.tar)       tar xvf $1     ;;
           *.tbz2)      tar xvjf $1    ;;
           *.tgz)       tar xvzf $1    ;;
           *.zip)       unzip $1       ;;
           *.Z)         uncompress $1  ;;
           *.7z)        7z x $1        ;;
           *)           echo "don't know how to extract '$1'..." ;;
       esac
   else
       echo "'$1' is not a valid file!"
   fi
 }

5

只需输入tar --help,便有您的备忘单。


12
说真的,您曾经尝试阅读该手册页吗?
deadprogrammer,

它可能有点难以理解且很长,但我认为仅查找选项名称就可以很好地工作。您也可以grep查找所需的选项,即'tar --help | grep提取”。
杰里米·鲁滕

1
大。然后,您必须浏览手册页,该手册页(在您正在寻找的内容中)告诉您成千上万的过时的流光器命令和选项,开发人员除外。

2
我真的不明白这有什么难的。要提取存档,只需找到extract选项,然后在命令中添加-x即可。如果要使其冗长,请找到该选项并添加av以获取-xv。然后继续,直到获得所需的确切命令。它甚至具有用于常见操作的示例命令。
杰里米·鲁滕

1
杰里米,真正的问题是您可能并不总是知道正确的词汇。因此,很容易感到困惑并找到类似的选择,并且使它们不起作用。然后,您必须按适当的顺序放置其中的一些。对于从Windows迁移过来的人来说,这是不平凡的。甚至更多-如果他们不知道Windows中的脚本。
Nazadus

3

如果您在记住tar选项时遇到麻烦,请尝试使用管道:

  • zcat file.tar.gz | tar xvf -
  • bzcat file.tar.bz2 | tar xvf -

更换tar xvtar tv刚刚查看压缩包中的内容。

我个人使用以下助记符:

  • t,x或c分别用于“制表”,“ xtracting”或“创建”。
  • v用于列出所有文件。
  • z,j或tar.gz,tar.bz2或纯.tar分别为空。
  • f用于提供文件名,而不是使用stdin / stdout或磁带设备的默认值。

尽管“ j”和“ bzip2”似乎彼此无关,但我很容易记住此异常。

另外,我对Google取代“ man tar”感到很有趣。


您应该养成始终提供f选项的习惯:直到最近,tar的发行版默认为f -,历史默认值为f /dev/rmt0或类似。毕竟,tar是Tape ARchiver。
迅速

1
什么制表?
Claudiu)


2

三种最常用的操作

--create -c

创建一个新的tar存档。

--list -t

列出档案的内容。

--extract -x

从存档中提取一个或多个成员。


五个高级tar操作

--append -r

将新条目添加到已存在的归档中。

--update -u

如果有存档成员,则将它们的最新副本添加到存档末尾。

--concatenate --catenate -A

将一个或多个先前存在的档案添加到另一档案的末尾。

--delete

从存档中删除项目(不适用于磁带)。

--compare --diff -d

将存档成员与文件系统中的存档成员进行比较。



2

在打字时,我总是在脑海中读出命令

压缩详细的zip文件

tar cvzf FILE

提取详细的zip文件FILE

tar xvzf FILE

2

我做以下

创建一个tar:

tar czvf foo.tar.gz <files to be included>

要解压缩:

tar zxvf foo.tar.gz

这些应该是您需要担心的主要开关:

c - create
z - compress/uncompress
x - extracte
v - verbose
f - file

在尝试跨目录移动文件时,可以执行一些更高级的操作,例如tar和untar inline,如下所示:

tar cf - <files to be copied> | (cd <target directory>; tar xvf - )

1

我90%的时间都在使用

tar -xvf file.*  

x:解压缩
v:冗长(可选)
f:输入文件(tar,gz,bzip2等)

容易吧?:)
使用Fileroller,如果您不在控制台中,请使用Ark。


直到现在,我一直在使用fileroller,但是目前我不走运,因为我使用的版本使用1.1 Gb内存。
Andrew Grimm,2009年

1

我一直在使用一个Perl脚本调用aunpack,该部分atool项目,很多年了。因此,您只需运行:aunpack foo.{zip/tar.gz/tar.bz2}它就会基于文件扩展名执行正确的操作。

的另一个好处aunpack是,它不会污染很多文件的当前目录。假设其中有20个文件foo.zip不在子目录中。与其在当前目录中喷出这些文件,不如aunpack创建一个foo子目录并将所有文件放在其中。


1

您需要做的只是tar x(从stdin提取),tar c(tar到stdout),gzip -c(从stdin到stdout的gzip;-1-9压缩级别;同样适用bzip2)和gunzip -c(从stdin到stdout的gunzip)-其他一切都是管道。

要tar和gzip:

$ tar c * | gzip -c > out.tar.gz

解压缩和解压缩

$ gunzip -c < out.tar.gz | tar x

如果您想要进度条,请使用与cat类似的pv,但显示进度条:

$ tar c * | bzip2 -c | pv > out.tar.gz
 22.6MiB 0:00:03 [3.64MiB/s] [  <=>                           ]
$ pv in.tar.gz | bunzip2 -c | tar x
   80MiB 0:00:00 [  58MiB/s] [===============================>] 100%

0

我认为很容易想到您想要的东西,而不仅仅是一些字母。

为了说明,我将使用一个示例来提取file.tar.gz:

由于它是一个tar文件,因此您应该使用tar程序。然后是选项:

  1. X因为要通过电子邮件X道。
  2. z如果文件以.gz结尾。(gz在文件名中的tar之后)此选项将存档压缩。
  3. f表示文件,后跟档案名称。

在以下示例中对此进行了演示:

tar xzf file.tar.gz

0

我记得的方式是,它始终是“ tar XXvf”,两个X分别是

  • x代表e X tract或c代表C reate,
  • z = gzip,j = bzip2(gzip更常见,因此通常为z,无论出于何种原因j = bzip2都卡在了我的头上)。

有时您会遇到压缩但未压缩的文件,在其中将un添加到任何压缩类型。例如g un zip或b un zip2。

如果有的话,我忘记了2,有时会键入“ bzip”。


0

您还可以创建一个别名。只需将这两行添加到您的~/.bash_aliases文件中:

alias untar="tar xvf"
alias dotar="tar cvf"

然后,您可以untar foo.tar.gz用来提取和dotar foo.bar压缩。您可以使用其他容易记住的别名。


0

ç reate ž IP来˚F ilename

tar -czf myfile.tar.gz myfile.sql

Ë Xž IP与˚F ilename

tar -xzf myfile.tar.gz
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.