linux-cmd-zip-unzip

发布时间 2023-05-17 16:49:46作者: 天生帅才

linux-cmd-zip-unzip

参考地址

https://www.runoob.com/linux/linux-comm-zip.html

1.zip压缩

1.1.zip语法参数

zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期时间>][-<压缩效率>][压缩文件][文件...][-i <范本样式>][-x <范本样式>]


# 常用压缩参数
-r 递归处理,将指定目录下的所有文件和子目录一并处理

-q 静默压缩
-v 显示详情,执行过程或版本信息
-x filename 压缩时排除符合条件的文件exclude,支持通配符

-<num> 设置压缩率,数字越大压得越狠,默认为 -9 全量压缩,-0 只打包不压缩

# 额外文件参数
-S 包含系统和隐藏文件。
-m 压缩并删除原始文件,慎用
-y 压缩时直接保存符号连接,而非该链接指向的源文件
-X 不保存额外的文件属性

# 压缩文件的检查修复
-T 检查备份文件内的每个文件是否正确无误
-F 修复已损坏的压缩文件,需要配置 --out 使用

# 压缩文件加注释
-c 给每个被压缩的文件加注释,交互式
-z 替压缩文件加注释,交互式,需要以句点结束

# 压缩文件时修改文件类型
-ll 压缩文件时,把LF+CR字符置换成LF字符
-l 压缩文件时,把LF字符置换成LF+CR字符

# 修改压缩文件的属性
-t<日期时间> 修改压缩文件的时间信息,格式:mmddyyyy or yyyy-mm-dd
-o 压缩文件时修改压缩文件的 modify 时间,以源文件中最新文件的更改时间的为准,可用

1.2.zip实例演示

  • 压缩,默认显示压缩率
# 压缩文件和目录
zip -r aaa.zip /tmp     # 递归处理子目录
zip -rq aaa.zip /tmp    # 静默压缩
zip -rv aaa.zip /tmp    # 显示压缩详情,in out 为压缩前后的文件大小,stored 为压缩率
zip -rv aaa.zip /tmp/ -x *argus.sock    # 压缩式排除某些文件,支持通配符

[root@zuiyoujie data]# zip -rv aaa.zip /tmp/ -x *argus.sock -9
updating: tmp/  (in=0) (out=0) (stored 0%)
updating: tmp/hsperfdata_root/  (in=0) (out=0) (stored 0%)
updating: tmp/hsperfdata_root/31659     (in=32768) (out=4393) (deflated 87%)
updating: tmp/hsperfdata_root/1927      (in=32768) (out=4377) (deflated 87%)
updating: tmp/a.txt     (in=0) (out=0) (stored 0%)
updating: tmp/b.txt     (in=0) (out=0) (stored 0%)
updating: tmp/c.txt     (in=0) (out=0) (stored 0%)
total bytes=65536, compressed=8770 -> 87% savings       # 原文件大小 65536B,压缩后大小 8770B,压缩率 87%,也就是减少了 87% 的大小
[root@zuiyoujie data]# ll
total 24
-rw-r--r-- 1 root root 11240 May 18 15:07 aaa.zip       # 实际查看文件大小,会稍大一些,应该是和磁盘分区有关,占得块大小问题
drwxr-xr-x 2 root root  4096 Mar 20  2020 backup
drwxr-xr-x 4 root root  4096 Feb 27  2020 supervisor
drwxr-xr-x 3 root root  4096 Feb 29  2020 wwwroot
  • 从压缩文件 aaa.zip 中删除文件 a.txt
zip -dv aaa.zip a.txt
  • 修复压缩文件
zip -F aaa.zip --out bbb.zip

[root@zuiyoujie data]# zip -F aaa.zip --out bbb.zip
Fix archive (-F) - assume mostly intact archive
Zip entry offsets do not need adjusting
 copying: tmp/systemd-private-d7946d0592934cc4a68fdc99302fb8f2-chronyd.service-OvboxA/
 copying: tmp/systemd-private-d7946d0592934cc4a68fdc99302fb8f2-chronyd.service-OvboxA/tmp/
 copying: tmp/hsperfdata_root/
 copying: tmp/hsperfdata_root/31659
 copying: tmp/hsperfdata_root/1927
 copying: tmp/a.txt
 copying: tmp/b.txt
 copying: tmp/c.txt

[root@zuiyoujie data]# zip -T aaa.zip 
test of aaa.zip OK
  • 压缩时删除源文件
[root@zuiyoujie data]# zip -rvm ccc.zip aaa.zip    
updating: aaa.zip       (in=11435) (out=11435) (stored 0%)
total bytes=11435, compressed=11435 -> 0% savings
zip diagnostic: deleting file aaa.zip
[root@zuiyoujie data]# ll
total 36
drwxr-xr-x 2 root root  4096 Mar 20  2020 backup
-rw-r--r-- 1 root root 11296 May 18 15:18 bbb.zip
-rw-r--r-- 1 root root 11599 May 18 15:25 ccc.zip
drwxr-xr-x 4 root root  4096 Feb 27  2020 supervisor
drwxr-xr-x 3 root root  4096 Feb 29  2020 wwwroot
  • 压缩时加注释信息
# 给每个文件都加各自的注释,交互式
zip -rvc ddd.zip /tmp -x*sock

[root@zuiyoujie data]# zip -rv ddd.zip /tmp -x*sock -c
updating: tmp/  (in=0) (out=0) (stored 0%)
updating: tmp/b.txt     (in=0) (out=0) (stored 0%)
updating: tmp/a.txt     (in=0) (out=0) (stored 0%)
updating: tmp/c.txt     (in=0) (out=0) (stored 0%)
Enter comment for tmp/:
001
Enter comment for tmp/b.txt:
004
Enter comment for tmp/a.txt:

Enter comment for tmp/c.txt:

total bytes=65536, compressed=8970 -> 86% savings

2.unzip解压缩

  • unzip 为 .zip 压缩文件的解压缩程序

2.1.unzip语法参数

# 语法:
unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文件][文件][-d <目录>][-x <文件>] 或 unzip [-Z]

# 解压文件
-o overwrite files WITHOUT prompting,解压时强制覆盖现有文件
-n never overwrite existing files,解压时不会覆盖现有文件

# 检查文件
-t 对压缩文件中的每个文件进行检查
-l 列表显示压缩包的文件信息,包括 zip 时加入的注释信息,可用
-v 查看压缩文件详情
-z 查看压缩文件备注信息

# 其他参数
-d extract files into exdir,解压文件到指定目录
-x filename 解压时排除某些文件,支持通配符
-P<密码> 使用zip的密码选项。
-q  quiet mode (-qq => quieter)
-j  junk paths (do not make directories),解压时删除多级子目录

# 文件名处理
-s 将压缩文件中的全部文件名中的空白字符转换为下划线
-L 将压缩文件中的全部文件名改为小写。

# 输出文字结果
-X 解压缩时同时回存文件原来的UID/GID。
-M 将输出结果送到more程序处理。
-c 解压缩并转换为字符打印到屏幕上,乱码慎用
-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换,乱码慎用

2.2.unzip实例演示

  • 解压文件
# 直接解压,默认遇到同名文件需要交互判断是否覆盖
unzip aaa.zip

# 将 aaa.zip 文件解压到 /tmp 目录下
unzip aaa.zip -d /tmp
  • 解压或查看压缩文件
unzip -t aaa.zip    # 检查压缩文件
unzip -l aaa.zip    # 列表查看压缩文件详情
unzip -v aaa.zip    # 查看压缩文件详情
  • music.zip 压缩包里有多级子目录,并且子目录中其实都是歌曲文件,需要把这些文件都存放到根目录,而不是使用原有的额目录结构
unzip -j music.zip
  • 官方示例
See "unzip -hh" or unzip.txt for more help.  Examples:
  unzip data1 -x joe   => extract all files except joe from zipfile data1.zip
  unzip -p foo | more  => send contents of foo.zip via pipe into program more
  unzip -fo foo ReadMe => quietly replace existing ReadMe if archive file newer