8.17 用tar和gzip归档和压缩文件
-zcvf
看看8.7节和8.12节,思考一下其中讨论的内容,或许你会想到一个问题。如果想要压缩一个包含100个文件的目录,而且这些文件都位于不同的子目录中,会怎么样?如果使用gzip
或bzip2
的-r
(代表recursive)选项,最终得到的是100个单独的压缩文件,每个文件都整齐地保存在原先的子目录中。毫无疑问,这肯定不是你想要的结果。怎么可能会在一封电子邮件里面附加100个.gz
或.bz2
文件的附件呢?不可能的嘛!
这就是tar
显示身手的地方了。首先使用tar
命令对目录及其内容(位于各个子目录中的100个文件)进行归档,然后再使用gzip
或bzip2
对生成的tarball文件进行压缩。因为gzip
是与tar
配合使用时最常用的压缩程序,所以在此重点介绍它们的组合使用。如下所示:
$ ls -l moby-dick/*
scott scott 102519 moby-dick/job.txt
scott scott 1236574 moby-dick/moby-dick.txt
scott scott 508925 moby-dick/paradise_lost.txt
moby-dick/bible:
scott scott 207254 genesis.txt
scott scott 102519 job.txt
$ tar -cf moby.tar moby-dick/ | gzip -c >
moby.tar.gz
$ ls -l
scott scott 168 moby-dick/
scott scott 20 moby.tar.gz
这种方法可行,但需要输入的信息太多!还有一种简单得多的方法,应该作为默认方法。这种方法涉及tar
命令的两个新选项:-z
(或--gzip
)选项,能够在tar
中调用gzip
,这样就不需要手工调用了;-v
(或--verbose
)选项,虽然在此处并不真正需要,但总是有一定用处,因为它可以在tar
运行时通知其运行状况。
$ ls -l moby-dick/*
scott scott 102519 moby-dick/job.txt
scott scott 1236574 moby-dick/moby-dick.txt
scott scott 508925 moby-dick/paradise_lost.txt
moby-dick/bible:
scott scott 207254 genesis.txt
scott scott 102519 job.txt
$ tar -zcvf moby.tar.gz moby-dick/
moby-dick/
moby-dick/job.txt
moby-dick/bible/
moby-dick/bible/genesis.txt
moby-dick/bible/job.txt
moby-dick/moby-dick.txt
moby-dick/paradise_lost.txt
$ ls -l
scott scott 168 moby-dick
scott scott 846049 moby.tar.gz
通常,用tar
和gzip
归档和压缩文件,最终的文件扩展名是.tar.gz
。但是如果你愿意,也可以使用.tgz
或.tar.gzip
。
说明 完全有可能用
bzip2
来代替gzip
,让tar
与bzip2
配合使用,命令的用法如下所示(注意-j
选项,它正是引入bzip2
的关键):
$ tar -jcvf moby.tar.bz2 moby-dick/
在这个例子中,最终生成的文件扩展名应该是
.tar.bz2
。不过,也可以使用.tar.bzip2
、.tbz2
或.tbz
。如果用gzip
或bzip2
都可以生成文件名以.tbz
结尾的文件,这必定会造成很大的混淆。这就是要使用特定的文件扩展名的一个强有力的证据,只有这样才可以将这种混淆降低到最低的限度。