0%

Linux之打包/解包、压缩/解压

这里介绍Linux下如何对文件进行打包/解包、压缩/解压

abstract.jpg

压缩/解压:gzip命令

Linux中压缩、解压文件的工具有很多,比如:compress、gzip、bzip2、xz等。这里介绍高频使用的gzip命令。gzip工具特征在于:只能压缩文件,不能压缩目录。gzip压缩后默认在原文件名称后追加 .gz 后缀

1
2
3
4
5
6
7
8
# 压缩若干个指定的文件
gzip file1 file2 ...

# 压缩当前目录下的所有文件,其中通配符 * 代表当前目录下所有文件
gzip *

# 压缩当前目录下(含子目录下)的所有文件,其中通配符 * 代表当前目录下所有文件
gzip -r *

figure 1.jpg

解压操作类似,既可以使用gunzi命令。也可以继续使用gzip命令,只需添加 -d 选项即可

1
2
# 解压当前目录下(含子目录下)的所有文件,其中通配符 * 代表当前目录下所有文件
gzip -dr *

figure 2.jpg

打包/解包:tar命令

通过对比Linux、Win下的压缩操作表现来看,似乎发现一个问题了。Win下可以将多个文件压缩成一个文件,而在Linux中gzip命令则是一个一个压缩的。为此在Linux下需要先将多个文件归档到一个文件当中,即所谓的打包(归档文件的后缀习惯上用 .tar )。通常使用tar命令即可。事实上该tar命令选项较为复杂,而且很多选项基本很少用到。故这里只介绍常见的选项

  • -c :创建tar归档文件,即所谓的打包
  • -v :命令执行过程中显示正在处理的文件名
  • -f :用以指定操作的tar归档文件
  • -x :从tar归档文件中提取文件,即所谓的解包
  • -t :列出以查看tar归档文件中的内容,但不提取
  • -C :切换到指定目录
  • -z :调用gzip命令压缩/解压文件
  • -Z :调用compress命令压缩/解压文件
  • -j :调用bzip2命令压缩/解压文件
  • -J :调用xz命令压缩/解压文件

1. 打包命令如下所示

1
2
3
4
5
# 将指定文件打包到归档文件 file1.tar 中
tar -cvf file1.tar file1 file2 dir1/ dir2/ ...

# 将当前目录下(含子目录下)的所有文件打包到归档文件 file1.tar 中,其中通配符 * 代表当前目录下所有文件
tar -cvf file1.tar *

figure 3.jpg

2. 查看归档文件中的内容

1
2
# 查看归档文件 file1.tar 中的内容
tar -tf file1.tar

figure 4.jpg

3. 解包命令如下所示

1
2
3
4
5
# 对指定tar归档文件在当前工作目录下进行解包
tar -xvf temp/file1.tar

# 对指定tar归档文件在指定目录下进行解包
tar -xvf temp/file1.tar -C ./temp2/

figure 5.jpg

组合拳

故在Linux当中对多文件进行压缩前,一般都需要先打包成tar归档文件;而在解压后,通常得到也是一个tar归档文件,还需要再次解包。为此,tar命令中直接提供了 compress-z-j-J 等选项,以便直接调用compress、gzip、bzip2、xz等命令进行压缩/解压。故如果期望对多文件进行压缩,直接利用tar命令即可一次性搞定。解压文件同理。具体命令如下,这里以使用gzip压缩为例,如果期望使用其他压缩命令,只需将下述命令中的 -z 选项 替换为其它压缩软件对应的选项即可

1
2
3
4
5
# 压缩文件命令组合拳: 对指定文件打包并使用gzip压缩
tar -zcvf foo.tar.gz file1 file2 dir1 dir2 ...

# 解压文件命令组合拳:对压缩文件,先使用gzip解压,再解包
tar -zxvf foo.tar.gz

压缩示例

figure 6.jpg

解压示例

figure 7.jpg

这里强调下在解压的时候,我们首先需要知道该压缩文件是用什么工具压缩的。一方面,我们可以通过文件后缀名来判定;另一方面,我们还可以使用file命令来判定

  • 文件后缀名 .tar.gz.tgz 习惯上代表该tar归档文件使用gzip命令进行压缩
  • 文件后缀名 .tar.bz2 习惯上代表该tar归档文件使用bzip2命令进行压缩
  • 文件后缀名 .tar.xz 习惯上代表该tar归档文件使用xz命令进行压缩

figure 8.jpg

参考文献

  1. Linux命令行与shell脚本编程大全·第4版 Richard Blum、Christine Bresnahan著
请我喝杯咖啡捏~

欢迎关注我的微信公众号:青灯抽丝