首页 > 代码库 > tar归档

tar归档

   有的时候我们需要对电脑中的文件进行整理,比如电影、音乐、小说这些文件,我们要将其放到单独对应的文件夹中去,类似的这种操作在Linux中称为归档,将一些比较重要的文件打包在一起。进行归档的命令是——tar。


tar——tape archive:磁带档案

tar [OPTION...] [FILE]...

主选项:

-c:创建档案文件

-x:释放档案文件的内容

-t:查看档案文件中包含的文件

-u/-r:向档案文件中添加新的文件


辅助选项:

-f:指定档案的文件的路径

-C:在释放档案文件中的内容时,指定释放的路径

-z:在创建档案文件时,调用gzip进行压缩

-j:在创建档案文件时,调用bzip2进行压缩

-J:在创建档案文件时,调用xz进行压缩(可能不支持)

--exclude:在释放档案文件时,排除某个文件;

-k:在释放档案文件时,不会覆盖同名文件;


注意:c、x、t这三个选项是不能同时出现的,因为操作只能有一个,不能同时压缩、解压缩和查看文件。


下面对每个选项进行举例:

只进行打包:

[root@localhost 20170607yasuo]# cd ..
[root@localhost blog]# tar -cvf ./20170607yasuo.tar ./20170607yasuo/
./20170607yasuo/
./20170607yasuo/testbzip.bz2
./20170607yasuo/testgzip.gz
./20170607yasuo/testxz.xz
[root@localhost blog]# ls
20170607yasuo  20170607yasuo.tar
[root@localhost blog]#

   在这个例子中仅仅只是进行打包,使用到了“c”选项,在后头加上的“v”是将打包的详细过程显示出来,再后头有个“f”选项,这个是用来告诉“tar”命令将打包后的文件存放到哪里,在这个参数的后面要跟上要保存到的路径和文件名。  


注意:当像“cvf”这样的选项连用的时候,用来指定路径的“f”要放在最后,否则会出现意想不到的错误。


 在进行打包的时候可以同时对要打包的文件进行压缩(压缩的详细内容可以查看上一篇博客),进行“gzip”压缩使用“-z”选项:

[root@localhost blog]# tar -zcvf ./20170607yasuo.tar.gz ./20170607yasuo/
./20170607yasuo/
./20170607yasuo/testbzip.bz2
./20170607yasuo/testgzip.gz
./20170607yasuo/testxz.xz
[root@localhost blog]# ls
20170607yasuo  20170607yasuo.tar  20170607yasuo.tar.gz
[root@localhost blog]#


 进行“bzip2”压缩使用使用“-j”选项:

[root@localhost blog]# tar -jcvf ./20170607yasuo.tar.bz2 ./20170607yasuo/
./20170607yasuo/
./20170607yasuo/testbzip.bz2
./20170607yasuo/testgzip.gz
./20170607yasuo/testxz.xz
[root@localhost blog]# ls
20170607yasuo      20170607yasuo.tar.bz2
20170607yasuo.tar  20170607yasuo.tar.gz
[root@localhost blog]#


 进行“xz”压缩使用“-J”选项:

[root@localhost blog]# tar -Jcvf ./20170607yasuo.tar.xz ./20170607yasuo/
./20170607yasuo/
./20170607yasuo/testbzip.bz2
./20170607yasuo/testgzip.gz
./20170607yasuo/testxz.xz
[root@localhost blog]# ls
20170607yasuo      20170607yasuo.tar.bz2  20170607yasuo.tar.xz
20170607yasuo.tar  20170607yasuo.tar.gz
[root@localhost blog]#

 下面进行档案释放的演示:

  首先建立一个“20170607”用来存放释放出来的文件

[root@localhost blog]# mkdir 20170607
[root@localhost blog]# ls
20170607       20170607yasuo.tar      20170607yasuo.tar.gz
20170607yasuo  20170607yasuo.tar.bz2  20170607yasuo.tar.xz
[root@localhost blog]#


  然后将刚才打包的文件释放到这个文件夹中:

[root@localhost blog]# tar -xvf 20170607yasuo.tar -C ./20170607
./20170607yasuo/
./20170607yasuo/testbzip.bz2
./20170607yasuo/testgzip.gz
./20170607yasuo/testxz.xz
[root@localhost blog]# cd 20170607
[root@localhost 20170607]# ls
20170607yasuo
[root@localhost 20170607]# ls 20170607yasuo/
testbzip.bz2  testgzip.gz  testxz.xz
[root@localhost 20170607]#


 注意:在释放归档的时候,使用选项进行压缩的归档包要使用同样的选项进行解开,比如使用

tar -zcvf ./20170607yasuo.tar.gz ./20170607yasuo/

命令进行的归档,就要使用“-z”选项进行释放(建立“20170607a”文件来存放释放出来的文件):

[root@localhost blog]# mkdir 20170607a
[root@localhost blog]# tar -zxvf 20170607yasuo.tar.gz -C ./20170607a
./20170607yasuo/
./20170607yasuo/testbzip.bz2
./20170607yasuo/testgzip.gz
./20170607yasuo/testxz.xz
[root@localhost blog]# cd 20170607a/
[root@localhost 20170607a]# ls
20170607yasuo
[root@localhost 20170607a]#


 使用其他压缩选项进行的归档与此类似,就不再赘述。



 当我们创建了归档文件后,可以通过“-t”选项来查看其中包含的文件:

[root@localhost blog]# tar -tf 20170607yasuo.tar
./20170607yasuo/
./20170607yasuo/testbzip.bz2
./20170607yasuo/testgzip.gz
./20170607yasuo/testxz.xz
[root@localhost blog]#


   在创建了归档包之后如果出现了一个新的文件也要放到这个归档包中,那么有两个方法,第一种是删掉归档包,然后重新建一个;第二种方法是使用“-r”命令:

 先创建一个临时文件:

[root@localhost blog]# mktemp linshiXXX
linshiFwg
[root@localhost blog]# ls
20170607   20170607yasuo      20170607yasuo.tar.bz2  20170607yasuo.tar.xz
20170607a  20170607yasuo.tar  20170607yasuo.tar.gz   linshiFwg

 然后将这个临时文件通过tar命令的“-r”选项添加到归档包中:

[root@localhost blog]# tar -rf 20170607yasuo.tar linshiFwg 
[root@localhost blog]# tar -tf 20170607yasuo.tar
./20170607yasuo/
./20170607yasuo/testbzip.bz2
./20170607yasuo/testgzip.gz
./20170607yasuo/testxz.xz
linshiFwg
[root@localhost blog]#



  和这种添加归档包的操作类似还有更新,如果在归档包中的文件是一个需要被替换的文件,就可以使用“-u”选项来使用新的文件来替换归档包中的文件,比如:

 使用上一个例子中的文件“linshiFwg”,通过查看命令“cat”能够

[root@localhost blog]# cat linshiFwg 
[root@localhost blog]#

然后使用重定向来将一些内容写入到这个文件中:

[root@localhost blog]# echo "test" > linshiFwg 
[root@localhost blog]# cat linshiFwg 
test
[root@localhost blog]#


 当进行到这一步,此时这个文件中已经有了内容,而归档包中的那个还是空空的文件,此时使用“-u”命令将新的文件更新到归档包中:

[root@localhost blog]# tar -uf 20170607yasuo.tar linshiFwg 
[root@localhost blog]# mkdir 20170607b
[root@localhost blog]# tar -xvf 20170607yasuo.tar -C ./20170607b
./20170607yasuo/
./20170607yasuo/testbzip.bz2
./20170607yasuo/testgzip.gz
./20170607yasuo/testxz.xz
linshiFwg
linshiFwg
[root@localhost blog]# cd 20170607b
[root@localhost 20170607b]# ls
20170607yasuo  linshiFwg
[root@localhost 20170607b]# cat linshiFwg 
test
[root@localhost 20170607b]#

 此时再使用“cat”命令查看文件中内容,发现文件中的内容已经变成了新的内容。



tar归档