器→工具, 工具软件

Linux下文件的压缩与解压缩

钱魏Way · · 691 次浏览

Linux下文件的压缩与解压缩与Windows环境下有较大的区别,在Windows下只需要安装类似Winrar工具就能解压缩大部分文件,而在Linux命令行下每一种文件都有不同的压缩和解压缩方法。

常用Linux压缩解压缩命令

使用tar打包文件

Linux下最常用的打包程序就是tar(注意tar是打包,不是压缩!),使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩了。tar命令的选项有很多(用man tar可以查看到) 。

格式:tar [主选项+辅选项] 文件或目录

主选项:它们不可能同时出现,告诉tar要做什么事,是必须要有的

  • -c:创建新的压缩文件,相当与打包
  • -x:从压缩文件中释放文件,相当于拆包
  • -t:列出压缩文件中的内容

辅选项:可选

  • -C:切换到指定目录
  • -z:是否同时具有gzip的属性?亦即是否需要用gzip压缩或解压?一般格式为gz或xx.tgz
  • -j:是否同时具有bzip2的属性?亦即是否需要用bzip2压缩或解压?一般格式为bz2
  • -v:压缩过程中显示文件
  • -f:指定压缩文件,注意,在f之后要立即接档名(自己取的),不要再加其他参数
  • -p:使用原文件的原来属性
  • -exclude FILE:在压缩过程中,不要将FILE打包

常用命令:

压缩:

  • tar -cvf 文件或目录名 打包的对象——仅打包,不压缩
  • tar -zcvf 文件或目录名——打包后,以gzip压缩
  • tar -jcvf 文件或目录名——打包后,以bzip2压缩

查阅:(注意:根据是否为gzip压缩,来选择是否要加上z)

  • tar -ztvf 文件或目录名 ——查阅压缩文件中有那些文件

解压:

  • tar -xvf 文件或目录名
  • tar -zxvf 文件或目录名

示例:

  • tar -cvf file2.tar /home/user2/file2 #将/home/user2/file2文件打包到当前目录下的tar中,需要注意的是:使用绝对路径标识的源文件,在用tar命令压缩后,文件名连同绝对路径(home/user2/,根目录”/”被自动去掉了)一并被压缩进来,使用tar解压缩后会看到home文件,二并不是file2。
  • tar -cvf file2.tar -C /home/user2/file2 #使用-C命令,将tar的工作目录从当前目录改为/home/user2,将file2文件(不带绝对路径)压缩到tar中。注意:-C dir的作用在于改变工作目录,其有效期为该命令中下一次-C dir之前。
  • tar -xvf file2.tar -C /home/user2/file2 #将文件解压到指定目录路径下。

tar除了最基本的打包功能外,还可以在打包或解包的同时调用其他压缩软件,比如gzip、bzip2等。

tar调用gzip

gzip是GNU组织开发的一个压缩程序,.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序是gunzip。

  • 解压1:gunzip FileName.gz
  • 解压2:gzip -d FileName.gz
  • 压缩:gzip FileName

tar中使用-z这个参数来调用gzip。

  • tar -czf all.tar.gz *.jpg #这条命令是将所有.jpg的文件打成一个tar包,并且将其用gzip压缩,生成一个gzip压缩过的包,包名为gz
  • tar -xzf all.tar.gz #这条命令是将上面产生的包解开。

另外,如果遇到.tgz文件,操作方式相同,.tgz是.tar.gz的缩写。

tar调用bzip2

bzip2是一个压缩能力更强的压缩程序,.bz2结尾的文件就是bzip2压缩的结果。 与bzip2相对的解压程序是bunzip2。

  • 解压1:bzip2 -d FileName.bz2
  • 解压2:bunzip2 FileName.bz2
  • 压缩: bzip2 -z FileName

tar中使用-j这个参数来调用gzip。

  • tar -cjf all.tar.bz2 *.jpg #这条命令是将所有.jpg的文件打成一个tar包,并且将其用bzip2压缩,生成一个bzip2压缩过的包,包名为bz2
  • tar -xjf all.tar.bz2 #这条命令是将上面产生的包解开。

非常不常见的.bz文件也使用相同的方式进行解压缩。

tar调用compress

compress也是一个压缩程序,目前使用compress的人不如gzip和bzip2的人多。.Z结尾的文件就是bzip2压缩的结果。与 compress相对的解压程序是uncompress。

  • 解压:uncompress FileName.Z
  • 压缩:compress FileName

tar中使用-Z这个参数来调用compress。下面来举例说明一下:

tar -cZf all.tar.Z *.jpg #这条命令是将所有.jpg的文件打成一个tar包,并且将其用compress压缩,生成一个uncompress压缩过的包,包名为all.tar.Z

tar -xZf all.tar.Z #这条命令是将上面产生的包解开

Linux中的zip与unzip

zip命令详解

zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有”.zip”扩展名的压缩文件。

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

参 数:

  • -A 调整可执行的自动解压缩文件。
  • -b<工作目录> 指定暂时存放文件的目录。
  • -c 替每个被压缩的文件加上注释。
  • -d 从压缩文件内删除指定的文件。
  • -D 压缩文件内不建立目录名称。
  • -f 此参数的效果和指定”-u”参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
  • -F 尝试修复已损坏的压缩文件。
  • -g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。
  • -h 在线帮助。
  • -i<范本样式> 只压缩符合条件的文件。
  • -j 只保存文件名称及其内容,而不存放任何目录名称。
  • -J 删除压缩文件前面不必要的数据。
  • -k 使用MS-DOS兼容格式的文件名称。
  • -l 压缩文件时,把LF字符置换成LF+CR字符。
  • -ll 压缩文件时,把LF+CR字符置换成LF字符。
  • -L 显示版权信息。
  • -m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。
  • -n<字尾字符串> 不压缩具有特定字尾字符串的文件。
  • -o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。
  • -q 不显示指令执行过程。
  • -r 递归处理,将指定目录下的所有文件和子目录一并处理。
  • -S 包含系统和隐藏文件。
  • -t<日期时间> 把压缩文件的日期设成指定的日期。
  • -T 检查备份文件内的每个文件是否正确无误。
  • -u 更换较新的文件到压缩文件内。
  • -v 显示指令执行过程或显示版本信息。
  • -V 保存VMS操作系统的文件属性。
  • -w 在文件名称里假如版本编号,本参数仅在VMS操作系统下有效。
  • -x<范本样式> 压缩时排除符合条件的文件。
  • -X 不保存额外的文件属性。
  • -y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
  • -z 替压缩文件加上注释。
  • -$ 保存第一个被压缩文件所在磁盘的卷册名称。
  • -<压缩效率> 压缩效率是一个介于1-9的数值。

unzip 命令详解

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

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

参 数:

  • -c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。
  • -f 更新现有的文件。
  • -l 显示压缩文件内所包含的文件。
  • -p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
  • -t 检查压缩文件是否正确。
  • -u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
  • -v 执行是时显示详细的信息。
  • -z 仅显示压缩文件的备注文字。
  • -a 对文本文件进行必要的字符转换。
  • -b 不要对文本文件进行字符转换。
  • -C 压缩文件中的文件名称区分大小写。
  • -j 不处理压缩文件中原有的目录路径。
  • -L 将压缩文件中的全部文件名改为小写。
  • -M 将输出结果送到more程序处理。
  • -n 解压缩时不要覆盖原有的文件。
  • -o 不必先询问用户,unzip执行后覆盖原有文件。
  • -P<密码> 使用zip的密码选项。
  • -q 执行时不显示任何信息。
  • -s 将文件名中的空白字符转换为底线字符。
  • -V 保留VMS的文件版本信息。
  • -X 解压缩时同时回存文件原来的UID/GID。
  • [.zip文件] 指定.zip压缩文件。
  • [文件] 指定要处理.zip压缩文件中的哪些文件。
  • -d<目录> 指定文件解压缩后所要存储的目录。
  • -x<文件> 指定不要处理.zip压缩文件中的哪些文件。
  • -Z unzip -Z等于执行zipinfo指令

这么多参数估计已经看晕了,实际过程中并没有那么麻烦,以下样列:

  • zip -r yasuo.zip abc.txt dir1 #把一个文件txt和一个目录dir1压缩成为zip
  • unzip yasuo.zip #解压文件到当前目录
  • unzip abc\?.zip #同时解压当前目录下的文件zip,zip和abc3.zip?表示一个字符,如果用*表示任意多个字符
  • unzip -v large.zip #仅查看压缩文件zip中的内容,不解压
  • unzip -t large.zip #验证压缩文件zip的完整性
  • unzip -j music.zip #把压缩包zip中的文件全部解压到第一级目录,而不要创建与原目录结构一样的多层目录

Linux下rar文件的压缩与解压

.rar是在Windows中最常见的压缩文件格式,在Linux中如需使用需要安装rarlinux,官方:http://www.rarsoft.com/download.htm

wget http://www.rarsoft.com/rar/rarlinux-x64-5.4.0.tar.gz
cd rar
make && make install

或者使用RPM安装UNRAR,下载地址:http://pkgs.repoforge.org/unrar/

安装完成后即可使用rar和unrar命令。简单用法:

rar a all *.jpg #该命令是将所有.jpg的文件压缩成一个rar包,名为rar,该程序会将.rar 扩展名将自动附加到包名后。
unrar e all.rar #该命令是将rar中的所有文件解压出来。
$ rar --help

用法: rar <命令> -<选项 1> -<选项 N> <压缩档案> <文件...>
<@文件列表...> <解压缩路径\>

<命令>
a 添加文件到压缩档案
c 添加压缩档案注释(注释的大小最大不能超过62000字节)
cf 添加文件备注( 当使用'v'参数时显示文件备注,最大不能超过32767字节)
ch 改变压缩档案参数
cw 向指定文件写入档案备注
d 从档案中删除文件
e 解压缩文件到当前目录(不创建任何子目录)
f 刷新档案中的文件(更新这些文件自它们被打包之后产生的变化,不在压缩档案中增加新的)
i[par]=<str> 在档案中查找特定字符
k 锁定档案(任何试图改变压缩档案中内容的命令都会被忽略)
l[t,b] 列出档案[technical, bare]
m[f] 移动到压缩档案中[只针对文件]
p 打印文件到标准输出
r 修补压缩档案
rc 重建丢失的分卷
rn 重命名压缩档案中的文件
rr[N] 添加数据恢复记录
rv[N] 创建恢复卷
s[name|-] 压缩档案与SFX(自解压文档)之间的转换
t 测试压缩档案文件
u 更新压缩档案中的文件
v[t,b] 列出压缩档案的详细信息[technical,bare]
x 解压缩到完整路径

<选项>
- 停止对选项的扫描
ad 追加档案名称到目标路径
ag[format] 使用当前数据生成压缩档案名
ap<path> 在档案内部设置路径
as 同步档案内目录
av 设置认证检测(只有注册版提供此功能)
av- 关闭认证检测
c- 关闭备注显示
cfg- 关闭读取设置
cl 转换名称为小写字母
cu 转换名称为大写字母
df 压缩后删除原文件
dh 打开共享文件
ds 关闭针对于稳固档案的名称排序
dw 压缩后擦除文件
e[+]<attr> 设置文件排除与包含属性
ed 不添加空目录
en 不设置档案结束块
ep 名称中不包含路径
ep1 名称中不包含基本文件目录
ep3 展开路径到完整包含的驱动器名
f 刷新文件
hp[password] 加密文件数据和文件头部
id[c,d,p,q] 关闭消息
ierr 发送所有消息到标准错误输出
ilog[name] 记录错误日志到文件中(只有注册版提供此功能)
inul 关闭所有消息
isnd 打开声音
k 锁定压缩档案
kb 保持被解压过的已损坏的文件
m<0..5> 设置压缩等级(0-存储...3-默认...5-最大)
mc<par> 设置高级压缩参数
md<size> Dictionary size in KB (64,128,256,512,1024,2048,4096 or A-G)
ms[ext;ext] 存储指定的文件类型
n<file> 仅包含指定的文件
n@ 从标准输入读取文件名到包含内容中
n@<list> 在指定列表文件中包含文件
o[+|-] 设置重写模式
ol 替文件保存符号连接作为连接
or 自动重命名文件
ow 保存活存储文件的拥有者与群组
p[password] 设置密码
p- 不询问密码
r 对子目录进行递归操作
r0 仅用通配符名称对子目录进行递归操作
rr[N] 添加数据恢复记录
rv[N] 创建恢复
s[<N>,v[-],e] 创建稳固档案压缩
s- 关闭稳固档案压缩
sc<chr>[obj] 设置指定的字符串
sfx[name] 创建SFX档案
si[name] 从标准输入读取数据
sl<size> 处理文件的大小小于指定的值
sm<size> 处理文件的大小大于指定的值
t 压缩后测试文件
ta<date> 处理修改日期为指定日期之后的文件,<date>格式: YYYYMMDDHHMMSS 
tb<date> 处理修改日期为指定日期之前的文件,<date>格式: YYYYMMDDHHMMSS
tk 保持档案最初的时间
tl 设置档案时间为据现在最近的文件时间
tn<time> 处理比指定时间新的文件
to<time> 处理比指定时间旧的文件
ts<m,c,a>[N] 保存或存储文件时间(修改,创建,访问)
u 更新文件
v 创建自动大小的卷或列出所有卷
v<size>[k,b] 创建指定大小的卷size=<size>*1000 [*1024, *1]
ver[n] 文件版本控制
vn 使用旧的卷命名体系
vp 在每个卷之前暂停
w<path> 指定工作目录
x<file> 排除指定文件
x@ 排除从标准输入中读取的文件名称
x@<list> 从指定列表文件中指定要排除的文件
y 设定所有回答为yes
z[file] 从文件中读取压缩档案的备注

注意:rar的<命令>部分不带”-“号,只有<选项>部分带”-“号,这一点注意一下。

例1:添加文件或目录到压缩档案中,使用a命令。

例如把文件files1添加到abc.rar中,使用a或m命令,a命令把file1文件添加到abc.rar档案中保持原有的file1文件不变,m命令移动file1文件到file1.rar档案中(压缩完成后会删除原有的file1文件,注意:m命令只针对文件进行操作)

rar a abc.rar file1

说明:如果此时abc.rar档案不存在,会自行创建abc.rar文档案,如果abc.rar档案已经存在,则将file1文件压缩进abc.rar档案中,若abc.rar档案中已存在一个file1文件,则会更新file1文件。并且原有的file1文件依然存在于当前目录下,若要将file1文件移动到file1.rar中请使用m命令,对于目录同样可以进行此操作。

注意:如果只输入”rar a file1.rar”命令,而没有接文件名或目录名的话,会将当前目录下所有的文件和文件夹压缩进file1.rar文档中。这点要注意一下。

例2:解压缩abc.rar档案中的内容

可以使用e或x命令,假设abc.rar目录中有一个名为file1的文件和一个名为test的目录,test目录中有一个名为file2的文件,

rar e abc.rar

说明:使用e命令,会将abc.rar中的file1文件连同test目录下的file2文件解压到当前目录。如果想保持abc.rar目录中的目录结构请使用x命令。

rar x abc.rar

说明:此时会将file1文件和test目录解压到当前文件夹。

例3:为整个压缩文件添加注释

rar c abc.rar

说明:输入该命令后,屏幕最下方会显示

Processing archive test.

rarReading comment from stdin

并有一个光标在闪烁,从光标闪烁的位置输入注释信息,输入完了按下Ctrl+D结束输入

例4:为压缩文件中的单个文件添加注释,使用cf命令。

假如现在要为abc.rar档案中的file1文件添加注释

rar ch abc.rar file1

此时屏幕最下方会显示

Reading comment for abc.rar : file1 from stdin

从光标闪烁出输入想要为file1添加的注释,Ctrl+D结束输入

例5:把整个档案的注释写入到一个文件中,使用cw命令。

加入要将abc.rar的注释写入到test.txt文件中

rar cw abc.rar test.txt

说明:如果当前目录下不存在名为test.txt的文件,则会自行创建一个名为test.txt的文件,并将abc.rar的注释写入到text.txt文件中,如果当前目录中已经存在一个名为text.txt的文件,则会提示你是否覆盖已经存在的文件,如果选择Yes或者All,则会清空test.txt中原有的内容,然后将abc.rar的注释内容写入到text.txt文件中。

例6:删除压缩档案中的文件或目录,使用d命令

例如要删除abc.rar档案中的file1文件。

rar d abc.rar file1

说明:该命令删除abc.rar档案中的file1文件,对于目录同样有效。

以上为常用的压缩与解压缩命令,<选项>部分的使用不再进行介绍了,请大家自己尝试一下吧。

解压缩命令unrar的使用:

$unrar --help

用法: unrar <command> -<switch 1> -<switch N> <archive> <files...>
<@listfiles...> <path_to_extract\>

<命令>
e 解压文件到当前目录
l[t,b] 列出压缩文档信息[technical, bare]
p 打印文件到标准输出
t 测试压缩我俄当
v[t,b] 列出压缩文档的详细信息[technical,bare]
x 解压文件到完整路径

以下为<选项>部分,略去。

unrar的命令和rar具有同样的效果,可以看出unrar只包含了rar的一部分命令而已,因此使用rar就可以完成所有操作。

7z文件在Linux上的解压缩

个人在windows上比较喜欢安装7-zip,压缩的时候也常常使用.7z的格式。要解压缩.7z文件,首先需要安装7zip软件。

yum install p7zip

使用7zip的命令是7za。

安装完成后的使用方法:7za {a|d|l|e|u|x} 压缩包文件名 {文件列表或目录,可选}

  • a 向压缩包里添加文件或创建压缩包,如向7z添加jpg,执行:7za a 001.7z 001.jpg;将001目录打包执行:7za a 001.7z 001;
  • d 从压缩里删除文件,如将7z里的jpg删除,执行:7za d 001.7z 001.jpg
  • l 列出压缩包里的文件,如列出7z里的文件,执行:7za l 001.7z
  • e 解压到当前目录,目录结构会被破坏,如rar内有如下目录及文件123/456/789.html,
  • 执行:7za e 001.rar,目录123和456及文件html都会存放在当前目录下。
  • x 以完整路径解压。

实例:

  • 7za a vps12.7z /www #打包根目录下www目录的文件
  • 7za x vps12.7z -o/home/www #解压,-o表示输出目录,注意其与目录路径之间没有空格

Linux解压缩中文乱码问题解决方案

上面的文章中,学习了Linux常用的解压缩命令。但是在实际Linux使用过程中,解压缩还是有很多门道与坑存在。

图形环境解压缩软件

  • Xarchive:Manjaro(Deepin版) 自带,轻量型的解压缩软件
  • Peazip:同时支持Windows和Linux系统
  • Engrampa:MATE桌面环境下自带的解压缩软件
  • B1 Free Archiver:既支持PC(Linux、Windows、Mac OS)也支持手机(Android)

以上是我安装过的解压缩软件,不管哪一款功能都差不多,统一的问题是解压缩Windows下创建的.rar和.zip文件会出现中文乱码问题,原因是Windows中文版默认的字符集不是UTF-8而是CP936。

命令行环境解压缩软件

除了先前介绍的tar、zip/unzip、rar/unrar、p7zip外,这里特别推荐一款命令行解压缩软件unar,unar来自Mac OS上的解压缩软件The Unarchiver,只不过到Linux环境下就仅剩命令行操作了。Unar相比其他软件强大的点在于其解压时可以制定编码。

unar常用指令

  • 解压压缩包:unar document.zip
    • 默认支持各种格式,包含zip、rar等
  • 指定解压结果保持位置:unar document.zip -o /home/dir
  • 指定编码:unar -e GBK document.zip
    • 使用CP936、GB2312、GBK、GB18030都一样
  • 指定解压密码:unar -p password document.zip
    • 不指定也可以,命令行界面会出现要求输入密码的交互提示

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注