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
链接
- GNU Gzip,手册,gnu.org
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.
链接
- GNU Gzip,手册,gnu.org
的简写
zcat[编辑 | 编辑源代码]zcat 与uncompress -c相同,虽然在许多系统上它实际上与 "gzcat" 和.
链接
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
cpiocpio 用于创建归档。创建归档时,会将文件列表馈送到其标准输入(而不是在命令行上指定文件)。该文件列表通常由 ls、find 或 locate 创建,然后直接通过管道传输到 cpio;但它也可以先用 *grep、sed、sort 等命令进行过滤/编辑。存储为文件的(预先编辑过的)列表也可以使用,方法是使用 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
使用 find 和 fgrep 创建仅包含单词 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
链接
- cpio,单一...规范,版本 2,1997 年,opengroup.org
- C.4 实用程序,opengroup.org
- cpio 手册页,man.cat-v.org
- GNU CPIO,手册,gnu.org
pax
[edit | edit source]提供类似于tar的归档服务,但具有不同的命令行语法;提供比tar更多的存档格式。由于pax不假设磁带设备,因此有些人更喜欢它而不是tar。
根据 POSIX 标准,至少要支持的存档格式为 cpio、pax 和 ustar。FreeBSD pax 工具不支持pax 存档格式;pax 格式由 AIX 和 Solaris 支持。
虽然 POSIX 中有介绍,但pax 通常不会在 Linux 发行版中默认安装;tar 仍在继续使用。即使作为附加包安装,Linux 版pax 也不支持 POSIX 要求的pax 存档格式。
链接
- pax,opengroup.org
- pax,单一 UNIX® 规范,版本 2,1997 年,opengroup.org
- pax,freebsd.org
- pax(1p),man7.org - 来自 POSIX 程序员手册,而不是来自实际的 Linux
- pax,opensource.apple.com
- pax,适用于 AIX 7.3,ibm.com
- pax,适用于 Solaris 11.1,docs.oracle.com
- pax,heirloom.sourceforge.net
- paxutils,savannah.gnu.org - 没有发布版本;有一个 git 仓库
- pax (命令),wikipedia.org
- 软件包:pax,packages.ubuntu.com
- 软件包:pax,packages.debian.org
- pax,pkgs.org
- Pax-20201030,linuxfromscratch.org
- pax 不支持“pax”格式导致 LSB 失败,2009 年,bugs.launchpad.net/paxmirabilis
- pax 尚未符合最新版本的 POSIX 标准,2014 年,bugs.launchpad.net/ubuntu
- mircpio,位于 MirBSD 中,github.com
bzip2
[edit | edit source]bzip2 和 bunzip2 类似于“gzip”/“gunzip”,但使用不同的压缩方法。压缩通常比“gzip”更好,但速度更慢。解压缩速度相当快。
可以使用选项-1到-9来指定bzip2应该压缩的程度。数字表示以 100kB 为单位的“块”应该一次压缩多大,因此使用bzip2 -5 foo.bar 将以 500kB 的块大小压缩 foo.bar。通常,更大的块意味着更好的压缩(但可能速度更慢)。只有未损坏的“块”才能使用bzip2recover 从损坏的 bzip2 文件中恢复,因此,如果您压缩了 900kB 的块,则如果一个块损坏,您将丢失 900kB 的文件 - 但如果您使用的是 100kB 的块,则只会丢失 100kB(bzip2 -1)。默认情况下,bzip2 使用 900kB 的块来获得最佳压缩效果。
bzcat 与bunzip2 -c 相同,即bzip2 -dc。
链接
- bzip2,freebsd.org
zip
[edit | edit source]将文件添加到压缩的 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 存档中,文件/目录首先被收集到单个文件中 - 一个存档(例如cpio 或tar),然后这个单个文件被压缩(例如使用gzip 或bzip2)。
示例
- 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 更长。
链接
- zip,freebsd.org
- Info-ZIP,wikipedia.org
- Zip (文件格式),wikipedia.org
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”扩展名。
链接
- compress,opengroup.org
- compress 手册页,man.cat-v.org
- W:compress
uncompress
[edit | edit source]从 compress 创建的存档中提取文件。
链接
- uncompress,opengroup.org
- compress、uncompress、zcat,man.cat-v.org
- uncompress,freebsd.org
- W:compress
unar
[edit | edit source]从各种压缩格式中提取文件,包括 7z (7-zip) 和 RAR。许可证:LGPL。显示存档文件列表的配套实用程序是lsar。
链接
shar
[edit | edit source]一种遗留工具和一种文件格式,用于创建自解压缩文件存档,不受 POSIX 标准的约束。自解压缩存档是 shell 脚本。
链接
- shar,freebsd.org
- GNU shar 实用程序,gnu.org
- shar,manpages.ubuntu.com
- shar,wikipedia.org