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<日期时间> 把压缩文件的日期设成指定的日期。
- -u 更换较新的文件到压缩文件内。
- -v 显示指令执行过程或显示版本信息。
- -V 保存VMS操作系统的文件属性。
- -w 在文件名称里假如版本编号,本参数仅在VMS操作系统下有效。
- -x<范本样式> 压缩时排除符合条件的文件。
- -X 不保存额外的文件属性。
- -y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
- -z 替压缩文件加上注释。
- -$ 保存第一个被压缩文件所在磁盘的卷册名称。
- -<压缩效率> 压缩效率是一个介于1-9的数值。
-T 检查备份文件内的每个文件是否正确无误。
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]=在档案中查找特定字符 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 在档案内部设置路径 as 同步档案内目录 av 设置认证检测(只有注册版提供此功能) av- 关闭认证检测 c- 关闭备注显示 cfg- 关闭读取设置 cl 转换名称为小写字母 cu 转换名称为大写字母 df 压缩后删除原文件 dh 打开共享文件 ds 关闭针对于稳固档案的名称排序 dw 压缩后擦除文件 e[+] 设置文件排除与包含属性 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 设置高级压缩参数 md Dictionary size in KB (64,128,256,512,1024,2048,4096 or A-G) ms[ext;ext] 存储指定的文件类型 n 仅包含指定的文件 n@ 从标准输入读取文件名到包含内容中 n@ 在指定列表文件中包含文件 o[+|-] 设置重写模式 ol 替文件保存符号连接作为连接 or 自动重命名文件 ow 保存活存储文件的拥有者与群组 p[password] 设置密码 p- 不询问密码 r 对子目录进行递归操作 r0 仅用通配符名称对子目录进行递归操作 rr[N] 添加数据恢复记录 rv[N] 创建恢复 s[
,v[-],e] 创建稳固档案压缩 s- 关闭稳固档案压缩 sc [obj] 设置指定的字符串 sfx[name] 创建SFX档案 si[name] 从标准输入读取数据 sl 处理文件的大小小于指定的值 sm 处理文件的大小大于指定的值 t 压缩后测试文件 ta 处理修改日期为指定日期之后的文件, 格式:YYYYMMDDHHMMSS tb 处理修改日期为指定日期之前的文件, 格式:YYYYMMDDHHMMSS tk 保持档案最初的时间 tl 设置档案时间为据现在最近的文件时间 tn
注意: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. rar Reading 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 的注释内容写入到 test.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、MacOS)也支持手机(Android)
以上是我安装过的解压缩软件,不管哪一款功能都差不多,统一的问题是解压缩 Windows 下创建的 .rar 和 .zip 文件会出现中文乱码问题,原因是 Windows 中文版默认的字符集不是 UTF-8 而是 CP936。
命令行环境解压缩软件
除了先前介绍的 tar、zip/unzip、rar/unrar、p7zip 外,这里特别推荐一款命令行解压缩软件 unar,unar 来自 MacOS 上的解压缩软件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
- 不指定也可以,命令行界面会出现要求输入密码的交互提示