-- TOC --
本文总结Linux下几个常用的压缩解压命令工具,gzip,bzip2和xz。
Linux下最常用的压缩和解压工具,就是gzip。
压缩一个文件:
$ gzip <filename> # filename变成filename.gz
压缩文件同时保留源文件:
$ gzip -k <filename>
解压:
$ gzip -d <filename.gz>
$ gunzip <filename.gz> # filename.gz变成filename
解压文件同时保留原gz文件:
$ gzip -dk <filename.gz>
$ gunzip -k <filename.gz>
压缩时保留源文件,自定义压缩文件名:
$ gzip -c <filename> > <output.gz>
通过-c
参数,gzip将输出导入stdout,然后再重定向到一个文件中。
gzip的压缩率从1到9。1压缩比最低,但速度最快;9压缩比(可能)最高,速度也最慢;gzip默认使用6。
选择gzip的压缩率:
$ gzip -8 <filename> # --fast对应-1,--best对应-9
-l
可以查看.gz压缩文件的信息:
$ gzip -l test.gz
compressed uncompressed ratio uncompressed_name
2614 16728 84.5% test
还有个-t
参数,检查.gz文件的完整性,正确时没有任何输出。
专用于解压的工具,除了前面已经出现过的gunzip
,还有个zcat
命令:
$ zcat kk.txt.gz
123123123123
$ gunzip -c kk.txt.gz
$ gzip -dc kk.txt.gz
当命令行有多个文件的时候,相当于对多个文件使用gzip命令:
$ gzip kk tt
$ ls kk* tt*
kk.gz tt.gz
$ gunzip kk.gz tt.gz
$ ls kk* tt*
kk tt
就是因为gzip只对单文件进行压缩,在压缩文件夹的时候,需要配合tar命令打包,因此我们常常简单.tar.gz为后缀的压缩文件包:
$ tar -c <folder> -f <folder.tar>
$ gzip --best folder.tar
$ tar -c abc | gzip --best -c > abc.tar.gz # abc is a folder
Compared with gzip, bzip2 creates smaller archives but has a slower decompression time and higher memory use. bzip2 compresses files using the Burrows-Wheeler block sorting text compression algorithm, and Huffman coding. The command-line options provided are deliberately very similar to those of GNU gzip, but they are not identical. bzip2 expects a list of file names along with the command-line flags. Each file is replaced by a compressed version of itself, with the name original_name.bz2. Each compressed file has the same modification date, permissions, and, when possible, ownership as the corresponding original, so that these properties can be correctly restored at decompression time.
bzip2的压缩率比gzip好,但解压也更慢,并使用更多内存。bzip2的命令行参数与gzip非常相似,这是故意的。
gzip 的 0.1 版本是在 1992 年发布的,而 bzip2 的 0.1 版本是在 1996 年发布的,可见 bzip2 的开发是要晚于 gzip 的。由于 bzip2 与 gzip 相比,其压缩效果都更好,所以 bzip2 一经推出,便受到了广大用户的欢迎。由此可见,这不能算是重复造轮子,bzip2 让世界变得更加小而美了。
$ bzip2 sample.txt
$ ls
sample.txt.bz2
$ bzip2 -k sample.txt
$ ls
sample.txt sample.txt.bz2
$ tar -cf music.tar 1.mp3 2.mp3 3.mp3
$ bzip2 music.tar
$ ls
1.mp3 2.mp3 3.mp3 music.tar.bz2
存在bunzip2
命令,同样也有个bzcat
命令。
xz命令 XZ Utils 是为 POSIX 平台开发具有高压缩率的工具。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip 或 bzip2 生成的压缩文件更小,而且解压缩速度也很快(肯定没有gzip快吧)。最初 XZ Utils 的是基于 LZMA-SDK 开发,但是 LZMA-SDK 包含了一些 WINDOWS 平台的特性,所以 XZ Utils 为以适应 POSIX 平台作了大幅的修改。XZ Utils 的出现也是为了取代 POSIX 系统中旧的 LZMA Utils。
-z, --compress # 强制压缩
-d, --decompress, --uncompress
# force decompression
-t, --test # 测试压缩文件的完整性
-l, --list # 列出有关.xz文件的信息
-k, --keep # 保留(不要删除)输入文件
-f, --force # 强制覆盖输出文件和(解)压缩链接
-c, --stdout, --to-stdout
# 写入标准输出,不要删除输入文件
-0 ... -9 # 压缩预设; 默认为6; 取压缩机*和*
# 使用7-9之前解压缩内存使用量考虑在内!
-e, --extreme # 尝试通过使用更多的CPU时间来提高压缩比;
# 要求不影响解压缩存储器
-T, --threads=NUM # 最多使用NUM个线程; 默认值为1; set to 0
# 设置为0,使用与处理器内核一样多的线程
-q, --quiet # 抑制警告; 指定两次以抑制错误
-v, --verbose # 冗长; 指定两次更详细
-h, --help # 显示这个简洁的帮助并退出
-H, --long-help # 显示更多帮助(还列出了高级选项)
-V, --version # 显示版本号并退出
命令行参数与gzip也基本相同。
下面的命令行可以将 /var/log 目录下所有的扩展名为 .log 的文件压缩。通过xargs命令同时运行多个 xz 进程进行压缩,每个进程同时处理16个文件(对16个文件同时应用xz命令)。
$ sudo find /var/log -type f -iname "*.log" -print0 | \
> xargs -P4 -n16 xz
有个xzcat
命令存在。
本文链接:https://cs.pynote.net/sf/linux/shell/202111281/
-- EOF --
-- MORE --