Shell文档归档、压缩与解压
Shell文档归档、压缩与解压
- 1、文件归档与压缩
- 2、zip、gzip与tar指令
- 2.1、zip指令
- 2.2、gzip指令
- 2.3、tar指令
1、文件归档与压缩
归档文件是指将一组文件或目录保存到一个文件中;压缩文件是指将一组文件或目录按照某种存储格式保存到一个文件中,所占磁盘空间比其中所有文件总大小要少
归档文件是没有经过压缩的,它所使用的磁盘空间等于其所有文件大小的总和。因而,用户可以将归档文件再进行压缩,使其容量更小
gzip
是Linux中最流行的压缩工具,具有较好的移植性,可在不同架构的系统中使用。如果用户需要经常在Linux与Windows之间交换文件,建议使用zip
目前,归档文件使用最广泛的是tar
命令,tar
可以将若干文件或目录合并到一个称为tarfile
的文件中,最初的设计目的是将文件备份到磁带(Tape ARchive)上,因而得名tar
,通常文件扩展名为.tar
,然后,再使用zip
、gzip
等压缩工具进行压缩
压缩工具 | 解压工具 | 文件扩展名 |
---|---|---|
zip | unzip | .zip |
gzip | gunzip | .gz |
tar | tar | .gz 、.tgz 、.bz2 等 |
在Linux系统中,通常更倾向于使用.tar
的压缩文件格式,因为.tar
文件本身并不是压缩文件,而是一种归档文件格式
2、zip、gzip与tar指令
2.1、zip指令
zip
指令可以压缩文件或目录,一般后缀名为.zip
,压缩后不覆盖源文件,并且能够保留文件的原始结构和属性,其语法格式如下:
zip [选项] 文件名.zip 文件/目录
常用选项如下:
- -r:递归压缩,将目录下的所有文件和子目录全部压缩
例如,压缩/etc/
目录(压缩文件名为etc.zip
):
zip -r etc.zip /etc/
unzip
指令对zip
压缩文件进行解压缩,其语法格式如下:
unzip 文件名.zip [-d dir]
其中,-d
可用于指定解压目标目录,例如:
unzip etc.zip -d ./test/
2.2、gzip指令
gzip
指令只能用来压缩文件,不能压缩目录,即使指定了目录,也只能压缩目录里的所有文件,一般后缀名为.gz
,压缩后会删除源文件,该命令会自动在当前文件名后添加扩展名.gz
,其语法格式如下:
gzip [选项] 文件名
常用选项如下:
- -num:指定压缩比率,可选有1~9等级,默认为6
- -d:将文件解压,功能与
gunzip
相同 - -l:查看压缩文件的信息,包括文件数、大小、压缩比等参数
例如,压缩log.txt
文件为log.txt.gz
:
gzip log.txt
gunzip
指令用于解压缩gzip
压缩的文件,其语法格式如下:
gunzip [选项] 文件名.gz
值得注意的是,选项-f
用于解压缩文件时,对覆盖同名文件不做提示(如果目标文件已经存在,不会进行提示,直接覆盖),在执行该命令后,它将删除旧的未压缩的文件并只保留已压缩的版本
2.3、tar指令
tar
指令用于将Linux文件和目录创建为归档文件或将归档文件还原为文件和目录。此外,tar
也可以在归档文件中改变文件,或者向归档文件中添加新的文件
tar
可用于压缩与解压缩。正向是打包与压缩,反向是解压缩与还原。打包是指将若干文件或目录变成一个总文件,压缩则是将一个总文件通过一些压缩算法(gzip
与bzip2
)变成一个小文件。反之,解压缩与还原刚好是相反的过程
tar
指令的语法格式如下:
tar [选项] 归档/压缩文件 文件/目录
常用选项如下:
- -c:创建一个新的归档文件
- -z:由
tar
生成归档,然后由gzip
命令压缩或解压归档 - -j:由
tar
生成归档,然后由bzip2
命令压缩或解压归档 - -v:显示指令执行归档或释放的过程信息
- -f:用户指定归档文件的文件名,否则使用默认名称
tar
- -x:释放归档文件,从归档提取文件
- -C:将归档工作目录从当前目录改为指定目录,对顺序敏感,即影响其后的所有选项
例如,指定打包为.dat
归档文件并使用gzip
进行压缩:
tar -czvf test.dat.gz ./test.dat/
压缩后的文件名称为test.dat.gz
例如,将归档并使用gzip
压缩的文件解压到指定目录下:
tar -zxf test.dat.gz -C ../test/
解压缩后在test
目录下可看到名为test.dat
的目录