前言
在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工具还是很人性化的,使用gzip、bzip等压缩工具,如果不使用特定选项或者特殊用法,处理后一般不会保留原文件的,但是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工具源码包,但是,这里可以使用xz和tar命令配合使用:
tar、tar配合使用:
#想使用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归档文件的,对应已经被压缩的文件是没法追加新文件的
#对file1、file2文件进行更改
[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文件默认没有file4,file5文件,因此file4、file5就被追加到后面了
[root@localhost test4]# tar -uvf file.tar file{4,5} file4 file5
#查看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 -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
#删除当前目录的file1到5文件
[root@localhost test4]# rm -rf file{1..5}
#展开文件到当前文件夹,发现有好多file1和file2
[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
原文地址:http://mengzhaofu.blog.51cto.com/10085198/1840100