Linux - Ubuntu中使用7zip和zip命令

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 [... ] [... ] [<@listfiles>... ]

添加压缩文件:

$ 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/

你可能感兴趣的:(Linux,linux,debian,ubuntu)