zip/unzip 指令 + zipinfo

目录
警告
本文最后更新于 2023-10-22,文中内容可能已过时。

zip/unzip指令 + zipinfo

如果系统中没有 zipunzip命令的话,下载也很方便,在 Centos 中执行

1
yum install -y zip unzipss

zip

Linux zip 命令用于压缩文件。zip是个使用广泛的压缩程序,压缩后的文件后缀名为.zip

我感觉ziptar+gzip好用,而且功能更多样,是的,但是在特定场景下zip也有缺点。

  • zip在跨平台解压的时候,容器文件名乱码

  • tar 对 Linux/Unix 文件系统更友好,可以保留所有文件系统信息,而 zip 基本之针对 MSDOS 文件系统进行了支持。比如很多 Linux 开源软件的发行,都是需要打包很多文件,同时需要保留这些文件的权限标识,一些文件对所有用户可读、一些文件仅对 root 用户可读,还有一些文件需要可执行权限。当然,在你不需要保留文件系统信息的情况下,使用 zip 也没有问题。

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

zip 命令是,先写目标压缩包,再写被压缩的源文件或者被操作的文件

  • -A:调整可执行的自动解压缩文件。

  • -b <工作目录>:指定暂时存放文件的目录。没搞明白怎么用 TODO

  • -c 替每个被压缩的文件加上注释。会让你为每个文件手动输入注释,unzip -l 查看压缩包信息的时候可以看到

  • -z:替压缩文件加上注释。

  • -d:从压缩文件内删除指定的文件。

    注意,要写对文件在 jar 包内所在的相对路径

  • -D:压缩文件内不建立目录名称。(跟-j不是一个意思,不知道啥意思 TODO)

  • -f:更新现有的文件。

  • -F:尝试修复已损坏的压缩文件。

  • -g:将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。

  • -i <范本样式>:只压缩符合条件的文件。鸡肋

  • -x <范本样式>:压缩时排除符合条件的文件。鸡肋

    这两个参数我试了一下,要用引号,既不支持 glob 风格通配符,也不支持正则,只支持 * 和普通文本字符,其他字符一概不匹配,

    感觉还不如直接在源文件路径后面加上 glob 风格的通配符,比如:

  • -j:只保存文件名称及其内容,而不存放任何目录名称。这个参数很好用

  • -J:删除压缩文件前面不必要的数据。

  • -k:使用 MS-DOS 兼容格式的文件名称。

  • -l:压缩文件时,把 LF 字符置换成 LF+CR 字符。有用

  • -ll:压缩文件时,把 LF+CR 字符置换成 LF 字符。有用

  • -L:显示版权信息。

  • -m:将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。没有特殊要求的话最好不要这个干,

  • -n <字尾字符串>:不压缩具有特定字尾字符串的文件。

  • -o:以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。

  • -q:不显示指令执行过程。

  • -r:递归处理,将指定目录下的所有文件和子目录一并处理。当源文件是一个目录而且下面有子目录的时候,要用这个参数

  • -S:包含系统和隐藏文件。

  • -t <日期时间> 把压缩文件的日期设成指定的日期。

  • -T:检查备份文件内的每个文件是否正确无误。

  • -u-f:参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。

  • -v:显示指令执行过程或显示版本信息。

  • -<压缩效率> 压缩效率是一个介于 1-9 的数值。

常用参数:-r -j -d -c -z -m -i -x


基础用法

zip target.zip sourcefile0...

zip -r target.zip sourcefile0...

注意,zip压缩,是不会删除源文件的,此外,上面的命令会把从当前目录开始,到目标文件的目录结构,也复制到压缩包中,比如从当前目录到 11.txt,有一层文件夹 zipsource,那么压缩包里,11.txt 的路径就是<压缩文件>/zipsource/11.txt。这样的话,解压的时候会自动创建压缩包中的目录到解压的目标路径中。除非带上 -j

zip -j target.zip sourcefile0...

这样会有一个问题,不看文件夹的话,很容易出现重复文件,比如~/source/aaa.txt~/source/2/aaa.txt 在压缩 ~/source的时候,肯定会出现相互覆盖的情况,这个时候会报错:

zip -rj testj.zip source

1
zip error: Invalid command arguments (cannot repeat names in zip file)

实际情况如下:

压缩包建立之后,想要往里加文件,应该怎么办?

还是用这个命令:

zip target.zip sourcefile0...

如果重复地往 zip 压缩包内的同一个目录下添加同名文件,文件会自动更新。文件名称前面也变成了 updating

删除 zip 包里的文件则要使用 -d 参数


查看压缩包内容

unzip -l target.zip

或者用 zipinfo

unzip

Linux unzip 命令用于解压缩 zip 文件。unzip.zip压缩文件的解压缩程序。

1
unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文件][文件][-d <目录>][-x <文件>] 或 unzip [-Z]
  • -l:显示压缩文件内所包含的文件。查看压缩包内的信息

  • -v:执行是时显示详细的信息。比 -l 的信息更详细

  • -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换。相当于解压预览

  • -p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。

  • -f:更新现有的文件。

  • -t:检查压缩文件是否正确。

  • -u-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。

  • -z:仅显示压缩文件的备注文字。

  • -a:对文本文件进行必要的字符转换。

  • -b:不要对文本文件进行字符转换。

  • -C:压缩文件中的文件名称区分大小写。

  • -j:不处理压缩文件中原有的目录路径。将压缩包内的文件解压出去的时候,不带出压缩包内的路径,只把文件解压出去,非常有用

    这跟zip -j一样,会有重复问题,

    这样解压的时候,系统会提示,是否覆盖。

  • -L:将压缩文件中的全部文件名改为小写。

  • -M:将输出结果送到 more 程序处理。

  • -n:解压缩时不要覆盖原有的文件。

    如果解压出的文件在目标目录下都已经存在了,那使用这个参数将什么都不做。

  • -o:不必先询问用户,unzip 执行后覆盖原有文件。

    直接覆盖

  • -P <密码>:使用zip的密码选项。

  • -q:执行时不显示任何信息。

  • -s:将文件名中的空白字符转换为底线字符。

  • [.zip文件]:指定.zip压缩文件。

  • [文件]:指定要处理.zip压缩文件中的哪些文件。你可以只将压缩包里的某几个文件解压出来,66666,

  • -x <文件>:指定不要处理.zip压缩文件中的哪些文件。没试过,估计跟zip -x一样是鸡肋,还不如直接在路径后面用 glob 通配符

  • -d <目录>:指定文件解压缩后所要存储的目录。指定要存放的路径,常用

  • -Zunzip -Z等于执行zipinfo指令。

常用参数: -d -l -v -c -j -n -o


常规操作

unzip -d targetpath zipfile.zip:将 zip 文件解压到目录路径

当 targetpath 不存在的时候,系统会自动创建。当解压出的文件和目标路径下已存在的文件重名了的时候,unzip 会需要你确认操作:

rename 表示重命名。

你可以使用 -o或者 -n 直接全部覆盖或者全部不覆盖

还可以只解压压缩包内的某几个特定的文件,很方便

zipinfo

Linux zipinfo 命令用于列出压缩文件信息。执行zipinfo指令可得知 zip 压缩文件的详细信息。

  • -h:只列出压缩文件的文件名称。

  • -l:此参数的效果和指定-m参数类似,但会列出原始文件的大小而非每个文件的压缩率。

  • -m:此参数的效果和指定-s参数类似,但多会列出每个文件的压缩率。

  • -M:若信息内容超过一个画面,则采用类似more指令的方式列出信息。

  • -s:用类似执行ls -l指令的效果列出压缩文件内容。

  • -t:只列出压缩文件内所包含的文件数目,压缩前后的文件大小及压缩率。

  • -T:将压缩文件内每个文件的日期时间用年,月,日,时,分,秒的顺序列出。

  • -v:详细显示压缩文件内每一个文件的信息。

  • -x <范本样式>:不列出符合条件的文件的信息。

  • -z:如果压缩文件内含有注释,就将注释显示出来。


其实啥参数都不带就够了。

zipinfo ziptarget/123.zip

不是很好用,没有 unzip -l target.zip 好用

0%