8.17 用tar和gzip归档和压缩文件

-zcvf

看看8.7节和8.12节,思考一下其中讨论的内容,或许你会想到一个问题。如果想要压缩一个包含100个文件的目录,而且这些文件都位于不同的子目录中,会怎么样?如果使用gzipbzip2-r(代表recursive)选项,最终得到的是100个单独的压缩文件,每个文件都整齐地保存在原先的子目录中。毫无疑问,这肯定不是你想要的结果。怎么可能会在一封电子邮件里面附加100个.gz.bz2文件的附件呢?不可能的嘛!

这就是tar显示身手的地方了。首先使用tar命令对目录及其内容(位于各个子目录中的100个文件)进行归档,然后再使用gzipbzip2对生成的tarball文件进行压缩。因为gzip是与tar配合使用时最常用的压缩程序,所以在此重点介绍它们的组合使用。如下所示:

  1. $ ls -l moby-dick/*
  2. scott scott 102519 moby-dick/job.txt
  3. scott scott 1236574 moby-dick/moby-dick.txt
  4. scott scott 508925 moby-dick/paradise_lost.txt
  5. moby-dick/bible:
  6. scott scott 207254 genesis.txt
  7. scott scott 102519 job.txt
  8. $ tar -cf moby.tar moby-dick/ | gzip -c >
  9. moby.tar.gz
  10. $ ls -l
  11. scott scott 168 moby-dick/
  12. scott scott 20 moby.tar.gz

这种方法可行,但需要输入的信息太多!还有一种简单得多的方法,应该作为默认方法。这种方法涉及tar命令的两个新选项:-z(或--gzip)选项,能够在tar中调用gzip,这样就不需要手工调用了;-v(或--verbose)选项,虽然在此处并不真正需要,但总是有一定用处,因为它可以在tar运行时通知其运行状况。

  1. $ ls -l moby-dick/*
  2. scott scott 102519 moby-dick/job.txt
  3. scott scott 1236574 moby-dick/moby-dick.txt
  4. scott scott 508925 moby-dick/paradise_lost.txt
  5. moby-dick/bible:
  6. scott scott 207254 genesis.txt
  7. scott scott 102519 job.txt
  8. $ tar -zcvf moby.tar.gz moby-dick/
  9. moby-dick/
  10. moby-dick/job.txt
  11. moby-dick/bible/
  12. moby-dick/bible/genesis.txt
  13. moby-dick/bible/job.txt
  14. moby-dick/moby-dick.txt
  15. moby-dick/paradise_lost.txt
  16. $ ls -l
  17. scott scott 168 moby-dick
  18. scott scott 846049 moby.tar.gz

通常,用targzip归档和压缩文件,最终的文件扩展名是.tar.gz。但是如果你愿意,也可以使用.tgz.tar.gzip

说明 完全有可能用bzip2来代替gzip,让tarbzip2配合使用,命令的用法如下所示(注意-j选项,它正是引入bzip2的关键):

  1. $ tar -jcvf moby.tar.bz2 moby-dick/

在这个例子中,最终生成的文件扩展名应该是.tar.bz2。不过,也可以使用.tar.bzip2.tbz2.tbz。如果用gzipbzip2都可以生成文件名以.tbz结尾的文件,这必定会造成很大的混淆。这就是要使用特定的文件扩展名的一个强有力的证据,只有这样才可以将这种混淆降低到最低的限度。