打包和压缩

其实很简单的:甭管是打包还是压缩,参数一般以 vf 结尾,后跟包名称;打包的情况就是从 c(打包) x(解包) t(查看) 中挑一个;有压缩的话再从 z(gzip) j(bzip2) 中挑一个。Ok, 打完收工。

  1. 如果打包的文件很多很多,造成刷屏,就需要把 v 参数去掉;
  2. 包中追加(r)、更新(u)内容,使用率一般不是很高;

打包和压缩是两个概念。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

为什么要区分这两个概念呢?这源于 Linux 中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。

linux下最常用的打包程序就是 tar 了,使用 tar 程序打出来的包我们常称为 tar 包,tar 包文件通常都是以 .tar 结尾的。生成 tar 包后,就可以用其它的程序来进行压缩。

打包命令 tar

首先就来讲讲 tar 命令的基本用法:

tar 命令的选项有很多(用 man tar 可以查看到),但常用的就那么几个选项,下面来举例说明一下:

1
2
3
4
5
6
7
8
9
10
tar -cf all.tar *.jpg 
# 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
tar -rf all.tar *.gif
# 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
tar -uf all.tar logo.gif
# 这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
tar -tf all.tar
# 这条命令是列出all.tar包中所有文件,-t是列出文件的意思
tar -xf all.tar
# 这条命令是解出all.tar包中所有文件,-x是解开的意思

语法

语法:tar [主选项+辅选项] 文件或者目录

使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。

主选项:

1
2
3
4
5
-c: 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。相当于打包。
-x:从档案文件中释放文件。相当于拆包。
-t:列出档案文件的内容,查看已经备份了哪些文件。
-r:向归档文件末尾追加文件
-u:更新原打包文件中的文件

这五个是独立的命令,打包拆包都要用到其中一个,可以和别的命令连用但只能用其中一个。

辅助选项:

1
2
3
4
5
6
7
-v :打包/拆包的过程中显示文件,这个常用
-f :使用档名名字,请注意,在 f 之后要立即接档案名,不要再加其他参数
-p :使用原文件的原来属性(属性不会依据使用者而变)
--exclude FILE:在压缩的过程中,不要将 FILE 打包
-z :
-j :
-Z :

参数 -f 是必须的!

为了方便用户在打包解包的同时可以压缩或解压文件,tar 提供了一种特殊的功能。这就是 tar 可以在打包或解包的同时调用其它的压缩程序,比如调用 gzip、bzip2 等。

压缩命令

有很多个……

gzip

gzip 是 GNU 组织开发的一个压缩程序,.gz 结尾的文件就是 gzip 压缩的结果。与 gzip 相对的解压程序是 gunzip。tar 中使用 -z 这个参数来调用 gzip。下面来举例说明一下

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

bzip2

bzip2 是一个压缩能力更强的压缩程序,.bz2 结尾的文件就是 bzip2 压缩的结果。与 bzip2 相对的解压程序是 bunzip2。tar 中使用 -j 这个参数来调用 gzip。下面来举例说明一下:

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

compress

compress 也是一个压缩程序,但是好象使用 compress 的人不如 gzip 和 bzip2 的人多。.Z 结尾的文件就是 compress 压缩的结果。与 compress 相对的解压程序是 uncompress 。tar 中使用 -Z 这个参数来调用 compress。下面来举例说明一下:

1
2
3
4
tar -cZf all.tar.Z *.jpg 
# 这条命令是将所有.jpg的文件打成一个tar包,并且将其用compress压缩,生成一个uncompress压缩过的包,包名为all.tar.Z
tar -xZf all.tar.Z
# 这条命令是将上面产生的包解开

汇总

下面的参数是根据需要在压缩或解压档案时可选的。

1
2
3
-z:是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩或解压? 一般格式为xx.tar.gz或xx. tgz
-j:是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩或解压?一般格式为xx.tar.bz2
-Z:有compress属性的

拆包/解压缩

下面对于 拆包/解压缩 做一个小结:

  • 对于 .tar 结尾的文件

    1
    tar -xf all.tar
  • 对于 .gz 结尾的文件

    1
    2
    gzip -d all.gz
    gunzip all.gz
  • 对于 .tgz 或 .tar.gz 结尾的文件

    1
    2
    tar -xzf all.tar.gz 
    tar -xzf all.tgz
  • 对于 .bz2 结尾的文件

    1
    2
    bzip2 -d all.bz2 
    bunzip2 all.bz2
  • 对于 tar.bz2 结尾的文件

    1
    tar -xjf all.tar.bz2
  • 对于 .Z 结尾的文件

    1
    uncompress all.Z
  • 对于 .tar.Z 结尾的文件

    1
    tar -xZf all.tar.z

特殊范例

此章节中不在严格区分打包/压缩,拆包/解压 字面,不再咬文嚼字。

  1. 将某一目录下的压缩文件解压到另一目录;将某一目录下的打包文件解包到另一目录;
  2. 只解压压缩包中的个别文件,而非全部;
  3. 要压缩某一目录,但个别文件除外;
  4. 改变工作目录,神奇的 C 参数(大写,不是 c);

以上情况,因为在实际使用中涉及过少,不在此详述。参考 linux下使用tar命令 范例三、四、五 及其后续

Windows 下的压缩文件

对于Window下的常见压缩文件 .zip 和 .rar,Linux 也有相应的方法来解压它们:

.zip

linux 下提供了 zip 和 unzip 程序,zip 是压缩程序,unzip 是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:

1
2
3
4
zip all.zip *.jpg 
# 这条命令是将所有.jpg的文件压缩成一个zip包
unzip all.zip
# 这条命令是将all.zip中的所有文件解压出来

.rar

要在 linux 下处理 .rar 文件,需要安装 RAR for Linux,RAR for Linux 不是免费的;

下载之后解压直接 make 就安装好了,安装后就有了 rar 和 unrar 这两个程序,rar 是压缩程序,unrar 是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:

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

结束

到此为至,我们已经介绍过 linux 下的 tar、gzip、gunzip、bzip2、bunzip2、compress 、 uncompress、 zip、unzip、rar、unrar 等程式,你应该已经能够使用它们对 .tar 、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、. Z、.tar.Z、.zip、.rar 这10种压缩文件进行解压了,以后应该不需要为下载了一个软件而不知道如何在 Linux 下解开而烦恼了。而且以上方法对于 Unix 也基本有效。

以上主要参考自:

其实很简单的:甭管是打包还是压缩,参数一般以 vf 结尾,后跟包名称;打包的情况就是从 c(打包) x(解包) t(查看) 中挑一个;有压缩的话再从 z(gzip) j(bzip2) 中挑一个。Ok, 打完收工。

  1. 如果打包的文件很多很多,造成刷屏,就需要把 v 参数去掉;
  2. 包中追加(r)、更新(u)内容,使用率一般不是很高;

想要更详细的,哥哥啊,你干嘛不 man tar 呢。就一个命令,从网上查查常用法、惯用伎俩,要想再多懂一些就别再网上折腾了,浪费时间啊,老老实实 man ,最不济 –help 也行啊