7z形式的压缩,比ZIP的压缩比,能提高30%~50%。
以Ubuntu为例,如果没有安装7zip,先要安装。或者是Debian上。
$ sudo apt-get install p7zip
注意package的名字是p7zip,因为7是数字不能开头。
安装完看一下这个包都安装了哪些文件:
$ dpkg -L p7zip
/.
/usr
/usr/bin
/usr/bin/7zr
/usr/bin/p7zip
/usr/lib
/usr/lib/p7zip
/usr/lib/p7zip/7zr
/usr/share
/usr/share/doc
/usr/share/doc/p7zip
/usr/share/doc/p7zip/NEWS.Debian.gz
/usr/share/doc/p7zip/README.Debian
/usr/share/doc/p7zip/changelog.Debian.gz
/usr/share/doc/p7zip/copyright
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/7zr.1.gz
/usr/share/man/man1/p7zip.1.gz
我们看到主要两个bin文件,/usr/bin/7zr和/usr/bin/p7zip,还安装了manual文档。
这里我安装的是轻量版,所以装完使用的程序名是7zr,如果是安装的完全版,程序名是7za。
7zr是一个独立程序。
如果安装完全版以及支持rar的版本,命令如下(rar版可能收费,没试验):
$ sudo apt install p7zip-full p7zip-rar
安装完7zip后,在GUI界面上也可以操作。对7z或zip文件,可以鼠标右键选择解压缩,或者双击打开。
对普通文件或文件夹,选中后,右键也可以选择压缩。
命令行使用方法如下:
使用help命令查看帮助:
$ 7zr --help
或者使用man命令查看详细信息:
$ man 7zr
命令语法格式:
7zr
添加压缩文件:
$ 7zr a OutputFile files_to_compress
会在当前文件夹生成一个OutputFile.7z的一个压缩文件。
$ 7zr a OutputFile.7z files_to_compress
指定了7z后缀名,就不会再添加7z文件名后缀。和上条命令的结果一样。
解压文件:
使用完整路径的解压:
$ 7zr x file.7z
将所有文件或文件夹都放到一级目录中,
$ 7zr e file.7z
如果指定要解压的文件夹:
$ 7zr x -o./my_folder file.7z
注意-o后面直接接路径,中间没有空格。
使用List文件指定要压缩的文件列表:
$ cat list.txt
./1.txt
./2.txt
$ ls
1.txt 2.txt list.txt
$ 7zr a output @list.txt
$ ls
1.txt 2.txt list.txt output.7z
注意:
在Linux/Unix里,不要直接使用7-zip文件格式来进行文件备份。
因为7-zip并不保存文件的owner/group属性。
如果要备份,请使用tar命令。
备份一个文件夹:
$ tar cf - directory | 7zr a -si directory.tar.7z
提取一个备份文件:
7zr x -so directory.tar.7z | tar xf -
还有,使用通配符*时要注意,在将一个文件夹添加为7zip文件时,不需要使用此通配符,如果要使用,请注意一下结果的区别。
我使用的结果是,使用了*通配符,则在添加压缩文件时,会多包含进来一层。
另外在添加压缩文件时,要注意一下原文件夹里的隐藏文件和隐藏文件夹是否包含进来了,这些内容的名字都是以一个点开头的,比如~/.profile这个文件。
=======================================================
下面介绍一下如何使用zip命令来在linux中解压和压缩zip文件。
Zip文件使用广泛,在Windows,macOS和Linux中,都有工具方便的操作zip文件。
在Linux中,使用zip命令来创建zip压缩文件。
语法如下:
zip OPTIONS ARCHIVE_NAME FILES
要在指定的文件夹内创建zip压缩文件,用户要有写权限。
Zip类型的文件是不支持Linux风格的文件权限管理的,会丢失这些信息。所以zip解压出来的文件,其文件的所有者就是运行zip命令的用户,而不是文件创建时的用户。如果要保留这些文件权限信息,请使用tar命令。
而zip命令,大多数Linux版本中,并没有安装,没装的话先安装:
Ubuntu和Debian:
$ sudo apt install zip
CentOS和Fedora:
$ sudo yum install zip
压缩多个文件或文件夹:
$ zip archivename.zip filename1 filename2 filename3
如果参数里给的归档压缩文件名不是以.zip结尾,则自动加上,但如果名称中含"."则除外,比如想使用自己指定的后缀名时。
如果不想看见信息详情,使用-q选项。
如果要包含子文件夹使用-r选项。
$zip -q archivename.zip filename1 filename2 filename3
$zip -r archivename.zip directory_name1 directory_name2 file1 file1
zip命令支持的模式,可用的压缩模式,valid compression methods are: store, deflate, bzip2。
deflate是默认的压缩方法,如果判断一个文件没法压缩,则使用store方法,直接将此文件存储到压缩文件里,而不进行压缩处理。
大部分Linux版本中的zip命令还支持bzip2压缩方法,使用-Z选项:
$ zip -r -Z bzip2 archivename.zip directory_name
使用bzip2压缩方法,文件后缀名还是zip,同样的文件,压缩后可能还会变大。
指定压缩级别:
zip命令允许你使用破折号后跟0到9的来指定压缩级别。默认的压缩级别是-6。 当使用-0时,所有的文件都将不经压缩而被存储。-9将强制zip命令对所有文件使用最佳的压缩方式。
比如:
$zip -9 -r archivename.zip directory_name
压缩级别越高,压缩过程的CPU占用就越多,需要更多的时间来完成。
创建密码来保护zip文件:
$zip -e archivename.zip directory_name
然后会提示你输入密码:
Enter password:
Verify password:
创建split zip file:
想象一下,你想把Zip档案存储在一个文件托管服务上,该服务的文件上传大小限制为1GB,而你的Zip档案是5GB。
你可以使用-s选项和指定的大小来创建一个新的分割Zip文件。乘数可以是k(千字节)、m(兆字节)、g(千兆字节)或t(太字节)。
k (kilobytes), m (megabytes), g (gigabytes), or t (terabytes).
$ zip -s 1g -r archivename.zip directory_name
上面的命令会在一组档案达到指定的大小限制后继续创建新档案:
输出:
archivename.zip
archivename.z01
archivename.z02
archivename.z03
archivename.z04
zip命令例子
压缩所有当前文件夹下面的内容:
$ zip archivename *
并包含隐藏文件:
$ zip archivename .* *
只包含MP3文件,并不进行压缩:
$ zip -0 archivename *.mp3
要解压zip文件的话,要使用unzip命令。如果要查看更多的zip命令相关信息,使用man zip,info zip或zip --help命令。
关于unzip
同样的,先安装:
$ sudo apt install unzip
或
$ sudo yum install unzip
语法:
$ unzip latest.zip
默认模式,unzip会打印出所有解压缩的文件的名字,还有解压结束后的summary。
使用-q选项,省略这些信息。
$unzip -q filename.zip
指定解压的文件夹
使用-d选项:
$sudo unzip filename.zip -d /path/to/directory
如上,我们使用了sudo,所以解压的文件的权限就属于root用户。
如果对指定文件夹有写权限,使用当前用户即可。
解压带密码的文件
$ unzip -P PasswOrd filename.zip
或者不使用-P参数,则会在命令行上提示输入密码。
过滤解压文件
使用-x选项,后面跟空格分隔的文件列表,表明不需要解压的文件:
$ unzip filename.zip -x file1-to-exclude file2-to-exclude
$ unzip filename.zip -x "*.git/*"
解压时直接覆盖
如果解压文件在当前文件夹已存在,使用-o选项,则会直接覆盖而不会提示。
$ unzip -o filename.zip
解压时不覆盖
$ unzip -n filename.zip
已经存在的文件不会被覆盖。
解压多个文件
如果要解压当前文件夹下的多个zip文件,使用下面的正则表达式 regular expression:
$unzip '*.zip'
显示zip文件的内容
$ unzip -l filename.zip
参考:
How to Install and Use 7zip on Ubuntu Linux
https://linuxize.com/post/how-to-zip-files-and-directories-in-linux/
https://linuxize.com/post/how-to-unzip-files-in-linux/