跳转至内容

Unix/命令/文件压缩指南

来自维基教科书,为开放世界提供开放书籍

gzip 压缩文件。每个单独的文件被压缩成一个单独的文件。压缩后的文件包含一个 GNU zip 标头和压缩后的数据。

如果给定一个文件作为参数,gzip 会压缩该文件,添加 ".gz" 后缀,并删除原始文件。如果没有参数,gzip 会压缩标准输入并将压缩后的文件写入标准输出。

一些有用的选项是

-c  Write compressed file to stdout. Do not delete original file.
-d  Act like gunzip.
-1  Performance: Use fast compression (somewhat bigger result)
-9  Performance: Use best compression (somewhat slower)

示例

压缩名为README的文件。 创建README.gz并删除README.

$ gzip README

压缩名为README的文件。 标准输出(即压缩后的文件)由 shell 重定向到gzips/README.gz。 保留README.

$ gzip -c README > gzips/README.gz

不带参数使用 gzip 压缩README.

$ < README gzip > gzips/README.gz

链接

gunzip 解压缩用 "gzip" 或 "compress" 压缩的文件。它试图同时处理 gzip 的 GNU zip 格式和旧的 Unix compress 格式。它通过识别文件的扩展名(".gz" 或 ".Z" 或其他一些扩展名)来实现这一点。

一些有用的选项是

-c  Write uncompressed data to stdout. Do not delete original file.

撤销gzip README.gz的效果,用原始的未压缩版本替换文件的压缩版本。 创建README并删除README.gz.

$ gunzip README.gz

README.gz的未压缩内容写入标准输出。将其通过管道传输到分页器以方便阅读压缩后的文件。

$ gunzip -c README.gz | more

另一种方法是

$ gunzip < README.gz | more

有些人将文件命名为package.tgz作为package.tar.gz.

链接

的简写

zcat

[编辑 | 编辑源代码]zcatuncompress -c相同,虽然在许多系统上它实际上与 "gzcat" 和.

链接

  • gunzip -c
  • 相同。 zcat,opengroup.org
  • GNU Gzip,手册,gnu.org

zcat,freebsd.org

gzcat

[编辑 | 编辑源代码]相同,虽然在许多系统上它实际上与 "gzcat" 和gzcat 等同于.

gzip -dc

tar

[编辑 | 编辑源代码]

无压缩的归档。未被现代 POSIX 涵盖,POSIX 涵盖了 #pax;然而,tar 仍然被广泛使用。归档包含一个或多个文件或目录。

tar 的选项令人困惑。每次都指定一个模式。

  • 模式
  • -c 创建一个归档(要归档的文件,从文件创建归档)
  • -x 提取一个归档(归档到文件,从归档提取文件)

-t 列出归档(列出归档中的文件)

  • 选项
  • -f FILE 归档的名称 - 必须指定,除非使用磁带驱动器进行归档
  • -v 详细,列出所有正在归档/提取的文件
  • -p 在提取时保留权限和(如果可能)用户/组。
  • -z 使用 gzip/gunzip 创建/提取归档
  • -j 使用 bzip2/bunzip2 创建/提取归档

示例

-J 使用 XZ 创建/提取归档压缩(gzip)和打包(tar)目录myfiles以创建:

$ tar -czvf myfiles.tar.gz myfiles

myfiles.tar.gz压缩(gzip)和打包(tar)目录:

$ tar -xzvf myfiles.tar.gz

解压缩(gzip)和解包压缩后的包,从

中提取内容。 有两种不同的关于 gzip 压缩包的约定。一种经常遇到的 .tar.gz。另一种流行的选择是 .tgz。Slackware 软件包使用后一种约定。

如果您能够访问磁带设备或其他备份介质,则可以使用它而不是归档文件。如果要归档的资料超过备份介质的容量,程序将提示用户插入新的磁带或软盘。压缩(gzip)和打包(tar)目录使用以下命令备份

$ tar -cvf /dev/fd0 myfiles

目录到软盘

$ tar -xvf /dev/fd0

使用以下命令还原备份您也可以指定标准输入或输出-f -而不是归档文件或设备。通过将两个 "tar" 命令连接在一起,可以实现目录之间的复制。例如,假设我们有两个目录,from-stuff

$ ls -F
from-stuff/
to-stuff/

to-stuff而不是归档文件或设备。通过将两个 "tar" 命令连接在一起,可以实现目录之间的复制。例如,假设我们有两个目录,正如 Running Linux 中所述,您可以将中的所有内容镜像到

$ tar cf - . | (cd ../to-stuff; tar xvf -)

,方法如下

链接

  • 参考:Welsh, Matt, Matthias Kalle Dalheimer 和 Lar Kaufman (1999),Running Linux. 第三版,O'Reilly and Associates。
  • tar,The Single UNIX ® Specification,版本 2,1997,opengroup.org
  • C.4 实用程序,opengroup.org - 指示 tar 已被移除
  • tar 手册页,man.cat-v.org
  • tar,freebsd.org
  • GNU tar,手册,gnu.org

tar (computing),wikipedia.org

cpio

[编辑 | 编辑源代码]

cpio 用于创建归档。创建归档时,会将文件列表馈送到其标准输入(而不是在命令行上指定文件)。该文件列表通常由 lsfindlocate 创建,然后直接通过管道传输到 cpio;但它也可以先用 *grepsedsort 等命令进行过滤/编辑。存储为文件的(预先编辑过的)列表也可以使用,方法是使用 cat 将其馈送到管道或简单地重定向 shell 的标准输入 (<)。

  • cpio 以三种模式之一工作
  • cpio -o - 复制输出模式:文件从文件系统复制创建一个归档。通常归档是通过使用 shell 将 cpio 的输出重定向到文件(使用 >)来创建的。
  • cpio -i - 复制输入模式:从现有归档中提取文件,并将它们复制回文件系统。

cpio -p - 直通模式cpio 用于将文件从目录树中的一个位置复制到另一个位置,而不会创建实际的归档。

  • 此外还有
  • cpio -t - 列出归档:归档的内容将在不提取的情况下列出。

cpio -tv - 在这里,详细选项 (-v) 将导致 "长列表",包括权限、大小和所有权。

在复制输入、复制输出和直通模式中添加详细选项 (-v) 将导致 cpio 在提取/归档/复制文件时列出它们。

$ ls *.doc | cpio -ov > word-docs.cpio

使用 ls 创建当前目录中所有 doc 文件的归档(详细)

$ find . -name "*.txt" | cpio -ov > text-files.cpio

使用 find 创建当前目录及下级目录中所有 txt 文件的归档

$ find . -name "*.txt" -exec fgrep -l -i "wiki" {} \; | cpio -ov > wiki.cpio

使用 findfgrep 创建仅包含单词 wiki(不区分大小写)的 txt 文件的归档

对于 fgrep,选项 -i 表示 "忽略大小写",选项 -l 导致它只列出与模式匹配的文件的文件名。

$ cpio -ov < file-list.txt > archive.cpio

使用现有的文件列表

$ cat files1 files2 files3 | sort | uniq | cpio -ov > myfiles.cpio

要添加更多文件,请使用追加选项 (-A)。使用文件选项 (-F) 指定文件。

$ cat files4 | cpio -ovA -F myfiles.cpio

要提取文件(详细模式)

$ cpio -iv < myfiles.cpio

cpio 默认情况下不会创建目录,因此请使用选项 -d 来创建目录。

要提取文件,并在需要时创建目录

$ cpio -ivd < myfiles.cpio

要列出存档的内容,简短列出

$ cpio -t < myfiles.cpio

要列出存档的内容,长列表

$ cpio -tv < myfiles.cpio

链接

提供类似于tar的归档服务,但具有不同的命令行语法;提供比tar更多的存档格式。由于pax不假设磁带设备,因此有些人更喜欢它而不是tar

根据 POSIX 标准,至少要支持的存档格式为 cpio、pax 和 ustar。FreeBSD pax 工具不支持pax 存档格式;pax 格式由 AIX 和 Solaris 支持。

虽然 POSIX 中有介绍,但pax 通常不会在 Linux 发行版中默认安装;tar 仍在继续使用。即使作为附加包安装,Linux 版pax 也不支持 POSIX 要求的pax 存档格式。

链接

bzip2

[edit | edit source]

bzip2bunzip2 类似于“gzip”/“gunzip”,但使用不同的压缩方法。压缩通常比“gzip”更好,但速度更慢。解压缩速度相当快。

可以使用选项-1-9来指定bzip2应该压缩的程度。数字表示以 100kB 为单位的“块”应该一次压缩多大,因此使用bzip2 -5 foo.bar 将以 500kB 的块大小压缩 foo.bar。通常,更大的块意味着更好的压缩(但可能速度更慢)。只有未损坏的“块”才能使用bzip2recover 从损坏的 bzip2 文件中恢复,因此,如果您压缩了 900kB 的块,则如果一个块损坏,您将丢失 900kB 的文件 - 但如果您使用的是 100kB 的块,则只会丢失 100kB(bzip2 -1)。默认情况下,bzip2 使用 900kB 的块来获得最佳压缩效果。

bzcatbunzip2 -c 相同,即bzip2 -dc

链接

将文件添加到压缩的 zip 存档中。您可以使用 unzip 从 zip 存档中提取文件。zip 格式是 Microsoft Windows 个人电脑上使用的常见归档文件格式。zip 存档包含单独压缩的成员;想象一下先对每个文件进行 gzip 压缩,然后将它们 tar 起来,但使用不同的格式。

gzip 类似,可以通过提供介于 1 和 9 之间的数字作为选项来指定压缩质量(例如zip -5)。1 最快,但压缩质量很低。9 压缩质量最高,但速度很慢。此外,可以使用 0(即zip -0)来指定文件只应“存储”,而进行压缩(压缩率为 0%),从而使 zip 能够创建未压缩的存档。

请注意,zip 存档包含单独压缩的文件,这些文件收集到单个文件中。这与大多数其他压缩的Unix 存档(例如tar.gzfrom-stufftar.bz2) 不同,在其他压缩的Unix 存档中,文件/目录首先被收集到单个文件中 - 一个存档(例如cpiotar),然后这个单个文件被压缩(例如使用gzipbzip2)。

示例

  • zip archive.zip file.txt
    • 将文件添加到存档中。如果存档不存在,则创建它。
  • zip archive file.txt
    • 如上所述;自动添加 .zip 扩展名,创建 archive.zip。
  • cat filelist.txt | zip archive.zip -@
    • 将 filelist.txt 中列出的文件添加到存档中。
  • zip -0 archive.zip file.txt
    • 将文件添加到存档中,不进行任何压缩,只是存储文件。
  • zip archive.zip file1.txt file2.txt file3.txt
    • 将多个文件添加到存档中。
  • zip -r archive.zip .
    • 将当前目录和子目录中的所有文件添加到存档中(除了存档本身),保留目录嵌套信息。
  • zip -r -j archive.zip .
    • 如上所述,但没有目录嵌套信息。因此,每个文件只在其文件名下在存档中跟踪。
  • zip -h2
    • 输出扩展帮助,比 -h 更长。

链接

unzip

[edit | edit source]

从 zip 存档中提取文件。另见 zip。您可以从 GnuWin32 获取 Info-ZIP unzip 的 Windows 版本。FreeBSD 似乎使用的是自定义版本的 unzip,它与 Info-ZIP 不同,但基本兼容。

示例

  • unzip archive.zip
    • 从存档中提取所有文件。
  • unzip archive.zip file.txt
    • 从存档中提取特定文件。
  • unzip -l archive.zip
    • 列出存档中包含的文件,而不提取它们。

链接

compress

[edit | edit source]

compress 是一种在 UNIX 系统上流行的压缩文件格式。使用 compress 压缩的文件将在其名称后附加“.Z”扩展名。

链接

uncompress

[edit | edit source]

compress 创建的存档中提取文件。

链接

从各种压缩格式中提取文件,包括 7z (7-zip) 和 RAR。许可证:LGPL。显示存档文件列表的配套实用程序是lsar

链接

一种遗留工具和一种文件格式,用于创建自解压缩文件存档,不受 POSIX 标准的约束。自解压缩存档是 shell 脚本。

链接

华夏公益教科书