如何在UNIX命令行上压缩/解压缩?


540

如何从命令行创建和提取zip归档文件?


3
@joachim,您应该在问题中提出问题,并在答案中提供答案。回答您自己的问题没有问题,但不属于问题本身,因为这破坏了SO的整个社区“最佳答案”投票优势。另外,由于它与编程无关,因此可能更适合于超级用户。

2
如果您忘记了登录信息,将在哪里记录如何上网以及如何检查?

@ rlb.usa:我在许多不同服务器上的许多不同地方工作。正如我所看到的,使用SA作这样的注释对其他人也有帮助。
约阿希姆

Answers:


662

通常,一个用于tar创建一个未压缩的存档,gzip或者bzip2用于压缩该存档。相应的gunzipbunzip2命令可用于解压缩所述存档,或者您可以仅在tar命令上使用标志来执行解压缩。

如果您专门指的是Zip文件格式,则只需使用zipunzip命令。

压缩:

zip squash.zip file1 file2 file3

或压缩目录

zip -r squash.zip dir1

解压缩:

unzip squash.zip

这会将其解压缩到您当前的工作目录中。


72
我个人仅使用zip -r9 archive.zip files...语法(-r =递归-9 =最大压缩)。
amphetamachine

3
恰如其分:zip可以创建许多不同类型的.ZIP存档,以及使用许多不同的压缩器。另一方面,还有许多其他类似命名的压缩工具:7-Zip,gzip,bzip2,rzip等,这些工具不可互换。
北极精灵

5
如果您不希望包含父目录:cd dir1; zip -r ../squash.zip *
Marinos 16年

我很困惑,这样做是为了获得大量的充气和提取物,但是当我检查目录为空时,是否保存了原始zip文件?都去哪儿了?
Summer Developer

11
作为记录,使用unzip -d myfolder squash.zip提取到单独的新目录(myfolder)中,而不是将所有文件直接放入当前目录中,如果zip文件在其顶层包含许多文件和目录,这可能会很烦人。这模仿了大多数UI解压缩工具的工作方式。
亚历山大·克里姆采切克

64

在UNIX派生下,确实存在大量不同的压缩和解压缩方法,因此,我假设您是在一般意义上而不是特定文件格式中指“ zip” 。

您可以使用GNU tar程序压缩文件(压缩格式):

tar -zcvf myfile.tgz .

它将执行当前目录。.如果需要其他文件名,请替换为其他文件名。

要解压缩该文件,请使用:

tar -zxvf myfile.tgz

当然,这是假设您有tar能力进行压缩以及将文件合并为一个文件。

如果没有,则可以使用tar cvf紧随其后gzip(再次,如果可用)进行压缩,gunzip然后使用tar xvf


对于ZIP格式文件的具体经办,我会建议您下载7zip并使用-它承认一个庞大的多种文件格式,包括ZIP之一。


或用于tar jcvf file.tar.bz2...以bzip2格式tar Jcvf file.tar.xz ...压缩或用于xz压缩。
OldTimer

4
我否决了您的答案,因为问题是关于如何处理zip存档而不是tar文件。
海星

3
@Starfish,这当然在您的权限之内,谢谢您至少解释了为什么,所以很多人没有花时间去做:-)我采用了更一般的意义(压缩)而非特定格式的“ zip”,所以我会更清楚地说明。

请注意,在不同平台(从Mac到Linux,反之亦然)之间移动时,tar存档可能无法正常工作。Zip安全得多,因为它可以在所有系统上正常工作。
user1751825 '18

我认为从技术上讲这是gzip,所以很好。我猜。显然,这个问题并没有要求什么。
猫头鹰

30

如果您没有安装zip和unzip软件包,并且有java,则可以使用以下jar方法解压缩:

jar -xf file.zip

3
不是我的服务器,没有解压缩,zip,7z,什么都没有...这有效。谢谢!
Dariusz

2
这是一个很好的提示。
海星

29

好吧,当涉及为各种操作系统分发文件时,我建议使用7-zip

通常,在软件包中p7zip,您将获得7zand 7za命令,您可以使用该命令创建自己的7z档案。

7za还可以解压缩标准(pkzip)zip存档(并使用-tzip开关也可以创建它们)。

压缩方式:

7za a archive.7z file1 file2 directory/

解压缩:

7za x archive.7z

它还可以使用-sfx开关创建自解压档案:

7za a -sfx archive.exe files1 file2 dir

如果Windows用户无法打开7z存档,则建议使用此方法(如果您要为此建议一个工具:PeaZip)。

如果要对压缩包使用相同的压缩算法,请将该-J开关与tar

tar cJf archive.tar.xz file1 file2 dir

xz是一种UNIX工具,使用LZMA2压缩,但工作方式gzbz2等工作。它甚至可以用作过滤器。

7z不会在UNIX上创建具有完整文件系统信息的存档,因此您需要tar在使用7z之前使用(但是由于7z存储了有关该tar文件的其他信息,因此我建议使用xz,因为它是专为它设计的):

tar cf - file1 file2 dir | 7za z -si archive.tar.7z

2
我也许应该在答案后面加上atool,这是一个不错的小工具,可以使使用许多不同的压缩机更加舒适。将其绑定a并创建档案成为一个a arc.7z folder/或提取一个简单的东西a arc.7z
polemon 2014年

21
unzip <filename>

zip -r archive.zip <filename> [filename]

您需要确保通过软件包管理器安装了这些命令。这比在命令行上使用其他任何东西都难。这肯定比使用tar创建档案简单。


我知道这是一个旧线程,但这是最好的答案。不谈论7z或tar,其简洁明了的意义
凯尔(Kyle)

4

BSD Tar也可以做到这一点

bsdtar acf bravo.zip alfa.jpg

要么:

bsdtar xf bravo.zip

tar与GNU tar和其他版本相比,BSD 的优势是支持许多其他压缩格式tar。也许最大的好处是,它可以在使用tar类语法的同时这样做。你一定能使用7zunrarunzip等从命令行,但它们使用不同的语法。
njsg

3

最标准的答案是pax,建议在cpio和之上使用tar

cpio和POSIX 不同tar,但与GNU一样tarpax它能够存档文件和压缩存档。这种行为不同于zip,后者会在将每个文件放入存档之前先对其进行压缩。


1
是否pax支持zip存档?
海星

不,它也不支持pax存档!
roblogic '18年

2

这仅涵盖提取。

为此,我开始使用dtrx

这样做的全部目的是消除复杂性。因此,您只需将任何存档传递给它,它便会确定需要执行哪些操作。Zip,tar,gz ...的用法始终相同— dtrx archive.zip。它问了几个问题,您就完成了。

dtrx在大多数存储库中可用,因此您可以apt| yum安装它。


1

我经常发现自己尝试将修改后的文件压缩到我的工作目录中-将所有修改后的文件复制到另一个沙盒工作目录中,或者将它们保留一小段时间,因为我想撤消某些更改。

在这种情况下,我将修改后的文件列表复制到一个临时文件中,并zip与option一起使用-@

假设我修改了文件Foo.h,Bar.cc和TestBar.cc。

假设我创建了一个名为Modifyed-files.txt的文件,其内容为:

Foo.h
Bar.cc
TestBar.cc

我执行以下命令来压缩这些文件:

cat modified-files.txt | zip modified-files.zip -@
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.