zip/unzip 指令 + zipinfo
zip/unzip指令 + zipinfo
如果系统中没有 zip
和unzip
命令的话,下载也很方便,在 Centos 中执行
|
|
zip
Linux zip 命令用于压缩文件。zip
是个使用广泛的压缩程序,压缩后的文件后缀名为.zip
。
我感觉
zip
比tar+gzip
好用,而且功能更多样,是的,但是在特定场景下zip
也有缺点。
zip
在跨平台解压的时候,容器文件名乱码
tar
对 Linux/Unix 文件系统更友好,可以保留所有文件系统信息,而zip
基本之针对 MSDOS 文件系统进行了支持。比如很多 Linux 开源软件的发行,都是需要打包很多文件,同时需要保留这些文件的权限标识,一些文件对所有用户可读、一些文件仅对 root 用户可读,还有一些文件需要可执行权限。当然,在你不需要保留文件系统信息的情况下,使用zip
也没有问题。
|
|
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
:
|
|
实际情况如下:
压缩包建立之后,想要往里加文件,应该怎么办?
还是用这个命令:
zip target.zip sourcefile0...
如果重复地往 zip 压缩包内的同一个目录下添加同名文件,文件会自动更新。文件名称前面也变成了 updating
删除 zip 包里的文件则要使用 -d
参数
查看压缩包内容
unzip -l target.zip
或者用 zipinfo
unzip
Linux unzip 命令用于解压缩 zip 文件。unzip
为.zip
压缩文件的解压缩程序。
|
|
-
-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 <目录>
:指定文件解压缩后所要存储的目录。指定要存放的路径,常用 -
-Z
:unzip -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
好用