Changelog
版本 | 时间 | 修订章节 |
---|---|---|
1.0 | 2018-3-24 | 添加了关于xz 的内容 |
Linux文件压缩工具
工具 | 文件扩展名 | 描述 |
---|---|---|
bzip2 | .bz2 | 采用 Burrows-Wheeler 块排序文本压缩算法和霍夫曼编码 |
gzip | .gz | GNU压缩工具,用 Lempel-Ziv-Welch 编码 |
zip | .zip | Windows上 PKZIP 工具的 Unix 实现 |
xz | .xz | 使用 LZMA/LZMA2 压缩算法 |
bzip2
工具
压缩文件
格式:
bzip2 文件名(不能是目录)
举例:
bzip2 pic.tar
这时候,你会发现原始文件pic.tar不见了,被替换成了pic.tar.bz2;
如果bzip2
后面跟多个文件(比如 命令bzip2 1.txt 2.txt 3.txt
),那么不会打包压缩,而是把每个文件分别压缩,*.txt
会变成*.txt.bz2
,不建议这样使用。
如果要保留原始文件,可以加-k
选项。
解压缩
格式:
bunzip2 xxx.bz2
或者
bzip2 -d xxx.bz2
举例:
bunzip2 pic.tar.bz2
这时候,你会发现原始文件pic.tar.bz2不见了,被替换成了pic.tar
如果要保留原始文件,可以加-k
选项。
gzip
工具
和bzip2
用法基本相同。
压缩文件
gzip 文件名(不能是目录)
这时候,你会发现原始文件xxx不见了,被替换成了xxx.gz;
如果gzip
后面跟多个文件,那么会把每个文件分别压缩,不建议这样使用。
如果要保留原始文件,可以加-k
选项。
解压缩
gunzip xxx.gz
或者
gzip -d xxx.gz
如果要保留原始文件,可以加-k
选项。
zip
工具
与上面两个工具不同的是,zip
工具可以处理目录。
压缩
zip
命令常用选项如下:
选项 | 说明 |
---|---|
-r | 递归处理,将指定目录下的所有文件和子目录一并处理。 |
-m | 将文件压缩后删除原始文件,即把文件移到压缩文件中。 |
-u | 更换较新的文件到压缩文件内。 |
-v | 显示指令的执行过程或版本信息。 |
解压缩
unzip
命令常用选项如下:
选项 | 说明 |
---|---|
-l | 显示压缩文件内所包含的文件(仅显示,并不解压)。 |
-v | 显示指令的执行过程或版本信息。 |
-t | 检查压缩文件是否正确。 |
-j | 不处理压缩文件中原有的目录路径。 |
-d <目录> | 解压文件到指定目录。 |
举例
- 我想把一个文件abc.txt和一个目录dir压缩成为aaa.zip:
zip -r aaa.zip abc.txt dir
- 我下载了一个aaa.zip文件,想解压:
unzip aaa.zip
- 我有一个很大的压缩文件large.zip,我不想解压缩,只想看看它里面有什么:
unzip -l large.zip
或
unzip -v large.zip
- 我下载了一个压缩文件large.zip,想验证一下这个压缩文件是否完整:
unzip -t large.zip
- 我用
-l
选项发现music.zip文件里面有很多目录和子目录,并且子目录中全是.mp3文件。我想把这些文件都解压到当前目录下,而不创建原有目录结构。
unzip -j music.zip
- 我想把aaa.zip解压到指定目录/a/b/c/下面(目录c可以有也可以没有,如果没有会自动创建,但是/a/b/必须要有)
unzip -d /a/b/c/ aaa.zip
xz工具
根据*的解释, xz
是一个使用 LZMA 压缩算法的无损数据压缩文件格式。和gzip
与bzip2
一样,同样支持多文件压缩,但是约定不能将多于一个的目标文件压缩进同一个档案文件。
压缩
xz 文件名(不能是目录)
这时候,你会发现原始文件xxx不见了,被替换成了xxx.xz;
如果xz
后面跟多个文件,那么会把每个文件分别压缩,不建议这样使用。
如果要保留原始文件,可以加-k
选项。
解压缩
xz -d xxx.xz
如果要保留原始文件,可以加-k
选项。
tar
命令
tar
命令是用来归档(把多个文件归档成一个文件)与提取的,本质上没有压缩与解压缩的功能。
命令格式
tar function [options] obj1 obj2 ...
function 参数定义了tar命令的功能,必须有一个。常用的参数如下表:
功能 | 描述 |
---|---|
-c | 创建一个新的归档文件 |
-x | 从已有归档文件中提取文件 |
-t | 列出已有归档文件的内容 |
-r | 追加文件到已有归档文件末尾 |
除了指定一个功能外,还可以指定一个或多个选项。常用的选项如下表:
选项 | 描述 |
---|---|
-f file | 在f后要立即接归档文件名(必须要这个参数) |
-v | 在处理时显示文件 |
-C dir | 切换到指定目录 |
-j | 将输出重定向给bzip2 命令来压缩或解压,此时档案名最好为*.tar.bz2
|
-z | 将输出重定向给gzip 命令来压缩或解压,此时档案名最好为*.tar.gz
|
把目录或文件归档
举例:
用tree
命令查看当前目录结构如下。
.
├── pic1
│ ├── Chrysanthemum.jpg
│ ├── Desert.jpg
│ ├── Hydrangeas.jpg
│ └── Jellyfish.jpg
└── pic2
├── Koala.jpg
├── Lighthouse.jpg
├── Penguins.jpg
└── Tulips.jpg
tar -cf pic.tar pic1/ pic2/
上面的命令把目录pic1和目录pic2的内容归档到文件pic.tar中。
这时候在WIN7下查看如下图:
注意,这里的pic.tar只是归档文件,并没有压缩,其大小约等于目录pic1之大小加上目录pic2之大小。
上述结果也可以用命令
tar -cf pic.tar *
把当前目录下所有内容归档到pic.tar
仅列出档案内容
如果只想列出归档文件pic.tar的内容,并不提取文件,可以用命令
tar -tf pic.tar
返回结果是:
pic1/
pic1/Chrysanthemum.jpg
pic1/Desert.jpg
pic1/Hydrangeas.jpg
pic1/Jellyfish.jpg
pic2/
pic2/Koala.jpg
pic2/Lighthouse.jpg
pic2/Penguins.jpg
pic2/Tulips.jpg
提取档案内容
假设当前目录下仅有pic.tar
提取文件可以用命令
tar -xf pic.tar
此时用tree
命令查看
.
├── pic1
│ ├── Chrysanthemum.jpg
│ ├── Desert.jpg
│ ├── Hydrangeas.jpg
│ └── Jellyfish.jpg
├── pic2
│ ├── Koala.jpg
│ ├── Lighthouse.jpg
│ ├── Penguins.jpg
│ └── Tulips.jpg
└── pic.tar
注意:不管是归档还是提取,原始文件都会被保留。
tar
命令与(解)压缩
上文已经说过,bzip2
、gzip
和xz
工具都不能处理目录,只能处理文件。如果想对整个目录进行压缩,可以先用tar
归档,再用bzip2
、gzip
或者xz
处理。为了方便,这两个过程可以合二为一。
于是tar
命令就有了如下的选项:
选项 | 说明 |
---|---|
-j | 将输出重定向给bzip2 命令来压缩或解压,此时档案名最好为*.tar.bz2
|
-z | 将输出重定向给gzip 命令来压缩或解压,此时档案名最好为*.tar.gz
|
-J | 将输出重定向给xz 命令来压缩或解压,此时档案名最好为*.tar.xz
|
打包并压缩
- 把目录dir1和dir2打包成all.tar后,并用bzip2压缩,最后生成一个压缩包,命名为all.tar.bz2
tar -cjf all.tar.bz2 dir1 dir2
- 把当前目录下的所有.jpg文件打包成jpg.tar后,并用gzip压缩,最后生成一个压缩包,命名为jpg.tar.gz
tar –czf jpg.tar.gz *.jpg
仅查看
在不解压的情况下查看压缩包的内容
tar -tf aaa.tar.gz
解压并提取
- 把aaa.tar.gz解压到当前目录
tar -xzf aaa.tar.gz
- 把aaa.tar.bz2解压到目录dir(dir必须存在)
tar -xjf aaa.tar.bz2 -C dir
简单总结
文件类型 | 归档或压缩 | 提取或解压 |
---|---|---|
*.bz2 | bzip2 | bzip2 -d |
*.gz | gzip | gzip -d |
*.xz | xz -z | xz -d |
*.zip | zip -r | unzip |
*.tar | tar -cf | tar -xf |
*.tar.bz2 | tar -cjf | tar -xjf |
*.tar.gz | tar -czf | tar -xzf |
*.tar.xz | tar -cJf | tar -xJf |
【参考资料】
https://www.cnblogs.com/chinareny2k/archive/2010/01/05/1639468.html
http://www.cnblogs.com/jyaray/archive/2011/04/30/2033362.html
https://zh.wikipedia.org/wiki/Xz
https://teddysun.com/294.html