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

joa*_*him 634 command-line zip

如何从命令行创建和提取 zip 档案?

Jus*_*ier 763

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

如果您特指Zip 文件格式,则可以简单地使用zipunzip命令。

压缩:

zip squash.zip file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

或压缩目录

zip -r squash.zip dir1
Run Code Online (Sandbox Code Playgroud)

解压:

unzip squash.zip
Run Code Online (Sandbox Code Playgroud)

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

  • 我个人只使用 `zip -r9 archive.zip files...` 语法(-r=recursive -9=max 压缩)。 (83认同)
  • 作为记录,使用 `unzip -d myfolder squash.zip` 解压到一个单独的新目录 (`myfolder`),而不是将所有文件直接放入当前目录,如果 zip 文件包含许多文件和目录在其顶级。这模仿了大多数 UI 解压缩工具的工作方式。 (18认同)
  • 如果您不想包含父目录:`cd dir1; zip -r ../squash.zip *` (7认同)
  • 顺便提一下:`zip` 可以创建许多不同风格的 .ZIP 档案,以及使用许多不同的压缩器。另一方面,还有许多其他名称类似的压缩工具:7-Zip、gzip、bzip2、rzip 等,它们不可互换。 (3认同)

小智 76

在 UNIX 衍生产品下有大量不同的压缩和解压缩方法,所以我假设您指的是一般意义上的“zip”,而不是特定的文件格式。

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

tar -zcvf myfile.tgz .
Run Code Online (Sandbox Code Playgroud)

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

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

tar -zxvf myfile.tgz
Run Code Online (Sandbox Code Playgroud)

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

如果没有,您可以只使用tar cvf后跟gzip(再次,如果可用)进行压缩,gunzip然后使用tar xvf.


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

  • 我不赞成你的回答,因为问题是关于如何处理 zip 档案而不是 tar 文件。 (12认同)
  • @Starfish,这当然在您的权利范围内,感谢您至少解释原因,很多人不花时间这样做:-) 我采用了更通用的意义(压缩)而不是特定格式的“zip”,所以我会说得更清楚。 (3认同)
  • 请注意,在不同平台、mac 到 linux 之间移动时,tar 存档可能无法正常工作,反之亦然。Zip 更安全,因为它可以在所有系统上正常工作。 (2认同)

小智 39

如果你没有安装 zip 和 unzip 包并且你有 java,你可以使用jar解压:

jar -xf file.zip
Run Code Online (Sandbox Code Playgroud)

  • 不是我的服务器,没有解压缩,压缩,7z,什么都没有......这有效。谢谢! (5认同)
  • 这是一个很好的提示。 (4认同)

pol*_*mon 30

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

通常在包中p7zip,您将获得7zand7za命令,您可以使用它创建自己的 7z 档案。

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

压缩:

7za a archive.7z file1 file2 directory/
Run Code Online (Sandbox Code Playgroud)

解压:

7za x archive.7z
Run Code Online (Sandbox Code Playgroud)

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

7za a -sfx archive.exe files1 file2 dir
Run Code Online (Sandbox Code Playgroud)

我推荐这种方法,以防 Windows 用户无法打开 7z 档案(如果您想为此建议一个工具:PeaZip)。

如果要对 tarball 使用相同的压缩算法,请使用-J带有tar以下选项的开关:

tar cJf archive.tar.xz file1 file2 dir
Run Code Online (Sandbox Code Playgroud)

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

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

tar cf - file1 file2 dir | 7za z -si archive.tar.7z
Run Code Online (Sandbox Code Playgroud)

  • 我也许应该用 `atool` 附加这个答案,它是一个不错的小工具,可以让使用许多不同的压缩器更加舒适。将其绑定到 `a` 并创建一个存档成为 `a arc.7z 文件夹/` 或提取一个简单的 `a arc.7z` (2认同)

Sta*_*ish 28

unzip <filename>
Run Code Online (Sandbox Code Playgroud)

zip -r archive.zip <filename> [filename]
Run Code Online (Sandbox Code Playgroud)

你需要确保这些命令是通过你的包管理器安装的。这并不比在命令行上使用其他任何东西更难。这当然比用 tar 创建档案更简单。

  • 我知道这是一个旧线程,但这是最好的答案。不谈 7z 或 tar,简明扼要 (4认同)

Ste*_*nny 5

BSD Tar 也可以做到这一点

bsdtar -a -c -f sunday.zip sunday.jpg
Run Code Online (Sandbox Code Playgroud)

或者:

bsdtar -x -f sunday.zip
Run Code Online (Sandbox Code Playgroud)