linux学习笔记_9_文件压缩

压缩后缀

后缀名 压缩程序
.z compress 程序压缩文件
.zip zip 程序压缩文件
.gz gzip 程序压缩文件
.bz2 bzip2 程序压缩文件
.xz xz 程序压缩文件
.tar tar 程序打包文件,没有经过压缩
.tar.gz tar 程序打包,经gzip压缩
.tar.bz2 tar 程序打包,经bzip2压缩
.tar.xz tar 程序打包,经xz压缩

tar程序只具有打包功能,将多个文件组合为单个文件。后来与压缩功能结合在一起,同时具有打包和压缩功能。

gzip

gzip 可处理compress,zip,gzip的压缩文件

  • -k 解压,压缩时保留源文件
  • -d 解压缩,不加此参数为压缩
  • -t 检验压缩文件是否完好
  • -num num为数字1-9,数字越大,压缩比越高,速度越慢。默认为6
  • -v 查看压缩比
  • -c 将压缩后的数据输出到标准输出,保留原始文件
# 压缩显示压缩比
$ gzip -v loss_acc_10 
loss_acc_10:     81.8% -- replaced with loss_acc_10.gz
# 解压缩
$ gzip -d loss_acc_10.gz 
# 设置压缩等级,这里压缩比的提高应该与源文件内容格式相关
$ gzip -9 -v loss_acc_10            
loss_acc_10:     82.7% -- replaced with loss_acc_10.gz

# 指定压缩后的文件名(通过重定向)
$ gzip -c loss_acc_10 > tmp.gz

zcat, zless, zmore, zgrep分别与cat, less, more, grep功能类似。

# zcat 查看压缩文件。
$ zcat loss_acc_10.gz 
epoch:0,cnt:1,time:2019-05-15 10:40:33, loss:0.69185
epoch:0,cnt:2,time:2019-05-15 10:41:02, loss:0.69262
...

bzip2

bzip2 相对于gzip具有更好的压缩比

  • -k 解压,压缩时保留源文件
  • -z 表示压缩,可不加
  • -d 表示解压缩
  • -t 检验压缩文件是否完好
  • -num 设置压缩等级
  • -v 显示压缩比
  • -c 压缩数据定向到标准输出,保留源文件

bzip2,bzcat,bzmore,bzless,bzgrep与gzip相应命令功能相似

xz

xz 相对于bzip2有更好的压缩比

  • -k 解压,压缩时保留源文件
  • -z 表示压缩,可不加
  • -d 表示解压缩
  • -t 检验压缩文件是否完好
  • -num 设置压缩等级
  • -c 压缩数据定向到标准输出,保留源文件
  • -l 显示压缩文件相关信息
  • -v 显示当前进度,压缩比,压缩速率, 运行时间, 预计运行时间等
$ xz -v google300wv.bin             
google300wv.bin (1/1)
  0.4 %      5,040.4 KiB / 12.6 MiB = 0.391   1.0 MiB/s       0:12       56 min

压缩程序对比

一般情况下:
压缩效果: gzip < bzip2 < xz

耗时:gzip < bzip2 < xz

tar

以上压缩程序仅能对单个文件进行压缩,无法像windows下那样对目录进行压缩。

  • -c 建立打包文件
  • -x 从包中提取文件
  • -v 显示打包,解包处理中的文件
  • -t 查看打包文件中含有的文件名
  • -f 指定要处理的打包文件或要生成的打包的文件
  • -z 通过gzip压缩,解压缩
  • -j 通过bzip2压缩,解压缩
  • -J 通过xz压缩,解压缩
  • -C 指定目录,一般用于解包中指定特定目录
  • -p 保留文件权限,属性。一般用于备份
  • -P 保留文件名的第一个斜线。
  • --exclude=FILE 不打包FILE文件

常用命令

  • 打包,压缩文件。 tar -zcv -f dist_file.tar.gz src_file
  • 查看包中文件名。tar -t -f file.tar.gz
  • 解压缩。tar -zxv -f file.tar.gz -C dist_dir解压至指定目录dist_dir(dist_dir需存在)。
$ tar -zxv -f etc.tar.gz -C etc_tmp # etc.tar.gz 解压至 etc_tmp
  • 解压包文件中的某一个文件
# 可以先查看打包文件中的内容,获得需要解压文件的文件名
# 查看打包文件中的内容
$ tar -ztv -f etc.tar.gz | head -n 10
drwxr-xr-x root/root         0 2019-05-24 06:53 etc/
drwxr-xr-x root/root         0 2019-04-25 02:42 etc/modules-load.d/
-rw-r--r-- root/root        76 2019-04-25 02:43 etc/modules-load.d/mhwd-gpu.conf
...
# 查找特定内容
$ tar -zt -f etc.tar.gz | grep "netconfig"
etc/netconfig

# 解压指定文件
$ tar -zxv -f etc.tar.gz  etc/netconfig #解压etc/netcofig

-P使用

  • 不添加-P
$ tar -zcv -f linux_learn.tar.gz  /home/xx/linux_learn 
tar: Removing leading `/' from member names
/home/xx/linux_learn/
/home/xx/linux_learn/loss_acc_20
/home/xx/linux_learn/passwd
/home/xx/linux_learn/tmp.expand
/home/xx/linux_learn/passwd.linux
/home/xx/linux_learn/tmp
/home/xx/linux_learn/group
/home/xx/linux_learn/loss_acc_10
# 查看文件路径,第一个/已被删去
$ tar -t -f linux_learn.tar.gz                            
home/xx/linux_learn/
home/xx/linux_learn/loss_acc_20
home/xx/linux_learn/passwd
...
  • 添加-P
$ tar -zPcv -f linux_learn.tar.gz  /home/xx/linux_learn 
tar: Removing leading `/' from member names
/home/xx/linux_learn/
/home/xx/linux_learn/loss_acc_20
/home/xx/linux_learn/passwd
...
查看文件路径,此时保留了第一个/
$ tar -tP -f linux_learn.tar.gz
/home/xx/linux_learn/
/home/xx/linux_learn/loss_acc_20
/home/xx/linux_learn/passwd
...

--exclude

打包某个目录,但不包含某些文件

# 打包/etc,为etc.tar.gz, 但不包括 /etc/netcofig
$ tar -zcv -f  etc.tar.gz --exclude=/etc/netconfig /etc

参考

《鸟哥的linux私房菜》

原文地址:https://www.cnblogs.com/lif323/p/10920276.html