标点符(钱魏 Way)

Linux下文件的压缩与解压缩

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

使用tar打包文件

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

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

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

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

辅选项:可选

  • -C:切换到指定目录
  • -z:是否同时具有gzip的属性?亦即是否需要用gzip压缩或解压?一般格式为tar.gz或xx.tgz
  • -j:是否同时具有bzip2的属性?亦即是否需要用bzip2压缩或解压?一般格式为tar.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等。

1) 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压缩过的包,包名为tar.gz
  • tar -xzf all.tar.gz #这条命令是将上面产生的包解开。

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

2) 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压缩过的包,包名为tar.bz2
  • tar -xjf all.tar.bz2 #这条命令是将上面产生的包解开。

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

3)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压缩成为yasuo.zip
  • unzip yasuo.zip #解压文件到当前目录
  • unzip abc\?.zip #同时解压当前目录下的文件zip,abc2.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

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

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

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

 

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

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

说明:如果此时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的文件,

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

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

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

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

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

例4:为压缩文件中的单个文件添加注释,使用cf命令。假如现在要为abc.rar档案中的file1文件添加注释

此时屏幕最下方会显示

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

例5:把整个档案的注释写入到一个文件中,使用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文件。

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

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

解压缩命令unrar的使用:

 

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

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

7z文件在Linux上的解压缩

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

使用7zip的命令是7za。

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

  • a 向压缩包里添加文件或创建压缩包,如向7z添加001.jpg,执行:7za a 001.7z 001.jpg;将001目录打包执行:7za a 001.7z 001;
  • d 从压缩里删除文件,如将7z里的001.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下文件的压缩与解压缩》

评论