码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 入门之文件的压缩和归档(2)

时间:2016-08-18 21:33:40      阅读:299      评论:0      收藏:0      [点我收藏+]

标签:打包工具   linux   tar   

Linux入门之归档与压缩(二)

前言

linux中,不仅有常见的压缩工具,也有打包工具,把单个或多个文件、文件夹打成包,方便管理,而tar工具就能很好的打包,然后调用其它压缩工具进行打包压缩结合

 

tar

命令用法:

tar  [option]...  /path/to/file...

-c :创建归档

-f :指明归档文件路径

-t :查看归档文件列表

-x :展开归档

-C :展开归档时使用此项执行展开路径

-j  :调用bzip2工具

-z  :调用gzip 工具

-J  :调用 xz 工具

-r  --append:添加新文件到.tar文件中

-u  --update : 更新.tar文件中的文件

--remove-files :压缩时不保留源文件

--delete:删除.tar中的文件

--excluede=/path :过滤指定文件不进行打包

常见用法:

创建归档:

tar  -c  -f  /path/to/somefile.tar  /path/to/file

tar  cf  /path/to/somefile.tar  /path/to/file

注意:这里选项前面加不加 - 符号都可以,因为tar工具在unix就已经使用了,因此保留了其部分命令风格

 

查看归档的文件中的文件列表:

tar  -t  -f  /path/to/somefile.tar

展开归档:

tar  -x  -f  /path/to/somefile.tar

tar  -x  -f  /path/to/somefile.tar  -C  /path

 

 

用法展示:

[root@localhost test4]# touch file1 file2 file3       #这里创建三个文件做测试
[root@localhost test4]# ls -l                           #显示出3个文件存在
total 12
-rw-r--r-- 1 root root 0 Aug 16 17:46 file1
-rw-r--r-- 1 root root 0 Aug 16 17:46 file2
-rw-r--r-- 1 root root 0 Aug 16 17:46 file3
[root@localhost test4]# tar cf ./file.tar ./file*  #使用-c选项将刚才3个文件归档为一个包
[root@localhost test4]# ls -l   #查看归档文件进程生成
total 28
-rw-r--r-- 1 root root     0 Aug 16 17:46 file1
-rw-r--r-- 1 root root     0 Aug 16 17:46 file2
-rw-r--r-- 1 root root     0 Aug 16 17:46 file3
-rw-r--r-- 1 root root 10240 Aug 16 17:47 file.tar
[root@localhost test4]# tar tf ./file.tar    #使用-t选项直接查看归档文件中的文件列表
./file1
./file2
./file3
[root@localhost test4]# rm -rf file{1,2,3}       #删除刚才创建的三个文件
[root@localhost test4]# tar xf ./file.tar        #使用-x选项直接展开归档到当前目录下
[root@localhost test4]# ls -l                #文件已经再次获取到
total 28
-rw-r--r-- 1 root root     0 Aug 16 17:46 file1
-rw-r--r-- 1 root root     0 Aug 16 17:46 file2
-rw-r--r-- 1 root root     0 Aug 16 17:46 file3
-rw-r--r-- 1 root root 10240 Aug 16 17:47 file.tar


解析:这里的tar工具还是很人性化的,使用gzipbzip等压缩工具,如果不使用特定选项或者特殊用法,处理后一般不会保留原文件的,但是tar就不一样了,无论什么操作,默认是会保留源文件的,下面进行归档并压缩:

 

调用gzip 工具归档并压缩

#file{1,2,3}3个文件进行归档并调用gzip压缩,且显示过程

[root@localhost test4]# tar zcvf file.tar.gz  file{1,2,3}
file1
file2
file3

#查看压缩文件是否已经生成

[root@localhost test4]# ls -l
total 36
-rw-r--r-- 1 root root     0 Aug 16 17:46 file1
-rw-r--r-- 1 root root     0 Aug 16 17:46 file2
-rw-r--r-- 1 root root     0 Aug 16 17:46 file3
-rw-r--r-- 1 root root 10240 Aug 16 17:47 file.tar
-rw-r--r-- 1 root root   131 Aug 16 18:03 file.tar.gz

#删除file{1,2,3}3个文件

[root@localhost test4]# rm -f ./file{1,2,3}

#不解压查看里面文件列表及详细属性

[root@localhost test4]# tar ztvf file.tar.gz 
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file1
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file2
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file3

#解压并展开归档文件,显示出3个文件已经生成当前目录下

[root@localhost test4]# tar zxvf ./file.tar.gz 
file1
file2
file3
[root@localhost test4]# ls -l
total 36
-rw-r--r-- 1 root root     0 Aug 16 17:46 file1
-rw-r--r-- 1 root root     0 Aug 16 17:46 file2
-rw-r--r-- 1 root root     0 Aug 16 17:46 file3
-rw-r--r-- 1 root root 10240 Aug 16 17:47 file.tar
-rw-r--r-- 1 root root   131 Aug 16 18:03 file.tar.gz

 

调用bzip2

#这里配合-j选项就可以调用bzip2工具进行压缩

[root@localhost test4]# tar jcvf file.tar.bz2 file{1,2,3}
file1
file2
file3

#查看刚刚生成的bzip2压缩归档文件中文件列表

[root@localhost test4]# tar jtvf file.tar.bz2 
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file1
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file2
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file3

#使用-C选项解压并展开归档文件列表到指定目录下

[root@localhost test4]# tar jxvf file.tar.bz2 -C ../test3/
file1
file2
file3

#查看指定目录下是否有刚才压缩的文件

[root@localhost test4]# ls -l ../test3/file*
-rw-r--r-- 1 root root 0 Aug 16 17:46 ../test3/file1
-rw-r--r-- 1 root root 0 Aug 16 17:46 ../test3/file2
-rw-r--r-- 1 root root 0 Aug 16 17:46 ../test3/file3

 

调用xz 工具

[root@localhost test4]# tar Jcvf file{1,2,3}
tar: invalid option -- J
Try `tar --help‘ or `tar --usage‘ for more information.
[root@localhost test4]# tar --version
tar (GNU tar) 1.15.1

解析:这里的用法就是把调用选项从z j 换成 J而已,其它选项都是一样的用法,但是这里我们发现,tar工具的版本有些低了,那么,可以选择去下载一个较新版本的tar工具源码包,但是,这里可以使用xztar命令配合使用:

 

tartar配合使用:

#想使用tar进行文件归档打包

[root@localhost test4]# tar cvf file.tar file{1,2,3}
file1
file2
file3

#再对刚才打包文件进行压缩

[root@localhost test4]# xz -k file.tar

#显示已经生成.xz文件

[root@localhost test4]# ls -l file.tar.xz 
-rw-r--r-- 1 root root 204 Aug 16 18:29 file.tar.xz
[root@localhost test4]# ls -l
total 72
-rw-r--r-- 1 root root 10240 Aug 16 18:29 file1
-rw-r--r-- 1 root root     0 Aug 16 17:46 file2
-rw-r--r-- 1 root root     0 Aug 16 17:46 file3
-rw-r--r-- 1 root root 20480 Aug 16 18:29 file.tar
-rw-r--r-- 1 root root   134 Aug 16 18:16 file.tar.bz2
-rw-r--r-- 1 root root   131 Aug 16 18:03 file.tar.gz
-rw-r--r-- 1 root root   204 Aug 16 18:29 file.tar.xz

#删除上次的打包文件

[root@localhost test4]# rm -rf file.tar

#先解压xz文件

[root@localhost test4]# xz -k -d file.tar.xz

#再用tar工具展开归档

[root@localhost test4]# tar xvf file.tar
file1
file2
file3


 

注意:使用tar工具进行打包或者压缩相关处理时,默认是不会删除原文件的,那么,对于某些情况下,我们只想把文件打包或压缩后,不再保留原文件也节约空间,也或者不解压或展开进行改变tar文件里的数据。当然tar工具也为我们预留了一些选项来保证这些需求:

 

不展开进行tar文件更新

 

移除tar文件中的某文件

#查看file.tar里的文件列表

[root@localhost test4]# tar tvf file.tar
-rw-r--r-- root/root     10240 2016-08-16 18:29:03 file1
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file2
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file3

#使用--delete选项来移除file.tar 中的 file1文件

[root@localhost test4]# tar --delete -f file.tar file1

#再次查看file.tar文件发现只剩下file2 file3了,而file1已被删除

[root@localhost test4]# tar -tvf file.tar
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file2
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file3

#移除剩下两个文件

[root@localhost test4]# tar  --delete  -f  file.tar file2 file3

#这时发现file.tar随意有大小,但是其内部没有任何文件,是一个空的打包文件

[root@localhost test4]# tar -tvf file.tar

 

tar文件新增文件

#使用-r选项进行文档追加,当然--append也是同样的效果

[root@localhost test4]# tar -f file.tar -r file{1,2}

#这时发现刚才的file.tar现在有新增了file1 file2 文件进去

[root@localhost test4]# tar -tvf file.tar
-rw-r--r-- root/root     10240 2016-08-16 18:29:03 file1
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file2

#现在查看一个gzip 压缩归档文件

[root@localhost test4]# tar -ztvf file.tar.gz
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file1
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file2
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file3

#我们试试看看能不能追加文件到压缩文件中

[root@localhost test4]# tar -zrvf file.tar.gz file{4,5}
tar: Cannot update compressed archives
Try `tar --help‘ or `tar --usage‘ for more information.

解析:看来tar的更新或追加功能是针对.tar归档文件的,对应已经被压缩的文件是没法追加新文件的

 

#file1file2文件进行更改

[root@localhost test4]# echo "hello world" > file1 
[root@localhost test4]# echo "new string" > file2

#使用-u选项进行更新

[root@localhost test4]# tar -uvf file.tar file{1,2}
file1
file2

#同样使用-u选项,tar文件默认没有file4file5文件,因此file4file5就被追加到后面了

[root@localhost test4]# tar -uvf file.tar file{4,5}
file4
file5

#查看tar文件中的文件,发现呀原来的file1file2并没有被覆盖,而是两种并存了

[root@localhost test4]# tar -tvf file.tar
-rw-r--r-- root/root     10240 2016-08-16 18:29:03 file1
-rw-r--r-- root/root         0 2016-08-16 17:46:46 file2
-rw-r--r-- root/root        12 2016-08-16 20:11:22 file1
-rw-r--r-- root/root        11 2016-08-16 20:11:38 file2
-rw-r--r-- root/root         0 2016-08-16 19:49:48 file4
-rw-r--r-- root/root         0 2016-08-16 19:49:48 file5

#删除当前目录的file15文件

[root@localhost test4]# rm -rf file{1..5}

#展开文件到当前文件夹,发现有好多file1file2

[root@localhost test4]# tar -xvf file.tar -C ./
file1
file2
file1
file2
file4
file5
file1
file2

#但是这个文件列表只是一个记录,真实情况还是只有一个文件,展开后出现4个文件

[root@localhost test4]# ls -l
total 72
-rw-r--r-- 1 root root    25 Aug 16 20:20 file1
-rw-r--r-- 1 root root    24 Aug 16 20:20 file2
-rw-r--r-- 1 root root     0 Aug 16 19:49 file4
-rw-r--r-- 1 root root     0 Aug 16 19:49 file5
-rw-r--r-- 1 root root 20480 Aug 16 20:21 file.tar
-rw-r--r-- 1 root root   134 Aug 16 18:16 file.tar.bz2
-rw-r--r-- 1 root root   167 Aug 16 20:04 file.tar.gz
-rw-r--r-- 1 root root   204 Aug 16 18:29 file.tar.xz

#查看file1,发现是最新的哪个file1文件

[root@localhost test4]# cat file1
hello world
new line two


#现在我们删除所有文件,进行一个新的测试

[root@localhost test4]# rm -f *

#重新创建3个文件如下

[root@localhost test4]# touch file.log file.txt file.conf

#打包3个文件并后跟--remove-files,表示不保留打包的源文件

[root@localhost test4]# tar cvf file.tar file.{log,txt,conf} --remove-files
file.log
file.txt
file.conf

#查看当前目录只剩下刚才打包的file.tar文件了

[root@localhost test4]# ls 
file.tar

#解压文件

[root@localhost test4]# tar xf  file.tar  -C  ./

#删除刚才的打包文件file.tar

[root@localhost test4]# rm -f file.tar

#过滤掉.conf.log结尾的文件,那么就只能把剩下的.txt文件打包了

[root@localhost test4]# tar cvf file1.tar ./* --exclude=*.conf --exclude=*.log
./file.txt
[root@localhost test4]# tar tvf file1.tar
-rw-r--r-- root/root         0 2016-08-16 20:52:02 ./file.txt


 

直解压出特定的文件

[root@localhost test4]# tar xvpf ./filedir.tar ./filedir/file.conf
./filedir/file.conf
[root@localhost test4]# ls filedir
file.conf
[root@localhost test4]# tar xvf ./filedir.tar ./filedir/file.txt
./filedir/file.txt
[root@localhost test4]# tar xvf ./filedir.tar ./filedir/file.txt
./filedir/file.txt
[root@localhost test4]# tar xvf ./filedir.tar ./filedir/*.txt
./filedir/file.txt


 

 

 


本文出自 “神剑特兰克斯” 博客,请务必保留此出处http://mengzhaofu.blog.51cto.com/10085198/1840100

Linux 入门之文件的压缩和归档(2)

标签:打包工具   linux   tar   

原文地址:http://mengzhaofu.blog.51cto.com/10085198/1840100

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!