tar这个软件非常强大,光看那help里面的参数就海多了…..我只说一些常用的指令。
-j 使用bzip2来压缩 ; -z 使用gzip来压缩 这两者当然不能同时使用了
-t 查看打包文件内有哪些文件 -x 解压或解打包 -c 打包 这三个指令也只能单一的存在,不能共存
-v 将在解压或压缩过程中的处理的文件显示出来
-f 后面接处理后的名字,比如我们压缩文件,那么-f后面接的一定是压缩后的文件名而不是被压缩的文件!如果是解压的话,那么-f后面接的一定是压缩文件名,而不是解压缩后的文件名。也可以这么说,-f后面就是接的压缩或打包文件。
-C 指定解压缩的目录。
-p 保存被压缩文件的权限不变。
–exclude=file 排除指定的文件
用gzip,bzip2方式来压缩多个文件
[sunjiebin@rhel6 test]$ ls
libgtkmm-2.4.so.1 loo ssh_config
以gzip打包多个文件并压缩,并显示被压缩的文件,指定文件名为gzip.tar.gz
[sunjiebin@rhel6 test]$ tar -zcvf gzip.tar.gz libgtkmm-2.4.so.1 loo/ ssh_config
libgtkmm-2.4.so.1
loo/
loo/ab.gz
loo/abc.gz
loo/lo/
loo/lo/abcd.gz
ssh_config
以bzip2打包并压缩,不显示处理的文件,指定文件名为bzip2.tar.gz
[sunjiebin@rhel6 test]$ tar -jcf bzip2.tar.bz2 libgtkmm-2.4.so.1 loo/ ssh_config
[sunjiebin@rhel6 test]$ ll
总用量 7296
-rw-r–r–. 1 sunjiebin hzh 969974 11月 12 15:52 bzip2.tar.bz2
-rw-r–r–. 1 sunjiebin hzh 1116181 11月 12 15:51 gzip.tar.gz
-rw-r–r–. 1 sunjiebin hzh 5373110 11月 12 14:40 libgtkmm-2.4.so.1
drwxr-xr-x. 3 root root 4096 11月 11 00:43 loo
-rw-r–r–. 1 root root 2047 11月 11 00:29 ssh_config
注意:f选项只能放在最后,因为f后面直接接的是处理后的文件名,如果用-jcfv的话,处理出来的文件就是v了!如:
[sunjiebin@rhel6 test]$ tar -jcfv test.tar.bz2 ssh_config
tar: test.tar.bz2:无法 stat: 没有那个文件或目录
tar: 由于前次错误,将以上次的错误状态退出
[sunjiebin@rhel6 test]$ tar -jcfv ssh_config
[sunjiebin@rhel6 test]$ ls
bzip2.tar.bz2 gzip.tar.gz libgtkmm-2.4.so.1 loo ssh_config v
查看压缩的文件内容
[sunjiebin@rhel6 test]$ tar -tvf gzip.tar.gz
-rw-r–r– sunjiebin/hzh 5373110 2011-11-12 14:40 libgtkmm-2.4.so.1
drwxr-xr-x root/root 0 2011-11-11 00:43 loo/
-rw-r–r– root/root 23 2011-11-11 00:40 loo/ab.gz
-rw-r–r– root/root 24 2011-11-11 00:41 loo/abc.gz
drwxr-xr-x root/root 0 2011-11-11 00:43 loo/lo/
-rw-r–r– root/root 25 2011-11-11 00:43 loo/lo/abcd.gz
-rw-r–r– root/root 2047 2011-11-11 00:29 ssh_config
注意,t,x,c是不能共存的!查看bzip2的压缩档也可以这样查看。
解压压缩文件内容
我们先用root用户建一个文件夹root,然后用jxf来解压
[root@rhel6 test]# mkdir root
[root@rhel6 test]# tar -jxf bzip2.tar.bz2 -C root/
[root@rhel6 test]# ll root/
总用量 5256
-rw-r–r–. 1 sunjiebin hzh 5373110 11月 12 14:40 libgtkmm-2.4.so.1
drwxr-xr-x. 3 root root 4096 11月 11 00:43 loo
-rw-r–r–. 1 sunjiebin hzh 2047 11月 11 00:29 ssh_config
我们再切换到普通用户sunjiebin,再解压看
[root@rhel6 test]# su sunjiebin
[sunjiebin@rhel6 test]$ mkdir user
[sunjiebin@rhel6 test]$ tar -jxf bzip2.tar.bz2 -C user/
[sunjiebin@rhel6 test]$ ll user/
总用量 5256
-rw-r–r–. 1 sunjiebin hzh 5373110 11月 12 14:40 libgtkmm-2.4.so.1
drwxr-xr-x. 3 sunjiebin hzh 4096 11月 11 00:43 loo
-rw-r–r–. 1 sunjiebin hzh 2047 11月 11 00:29 ssh_config
这时候我们会发现解压出来的文件所属者并不一样了。这里就涉及到了tar的两个默认参数-m -p。默认情况下,普通用户tar会加上一个-m的参数,即代表将文件解压为用户自身所有,且权限改为用户默认权限。而超级用户执行tar时,会加上一个-p参数,即保存文件原有的所有者及权限。
解压指定文件
我们先删除libgtkmm-2.4.so.1,然后再将它解压至当前目录
[sunjiebin@rhel6 test]$ rm libgtkmm-2.4.so.1
[sunjiebin@rhel6 test]$ ls
bzip2.tar.bz2 etc.tar.bz2 loo pbzip2.tar.bz2 root single ssh_config user
[sunjiebin@rhel6 test]$ tar -tf bzip2.tar.bz2
loo/
loo/ab.gz
loo/abc.gz
loo/lo/
loo/lo/abcd.gz
libgtkmm-2.4.so.1
ssh_config
[sunjiebin@rhel6 test]$ tar -jxvf bzip2.tar.bz2 libgtkmm-2.4.so.1
libgtkmm-2.4.so.1
[sunjiebin@rhel6 test]$ ls
bzip2.tar.bz2 libgtkmm-2.4.so.1 pbzip2.tar.bz2 single user
etc.tar.bz2 loo root ssh_config
可以看到,解压成功了。
我们将压缩文件目录下的内容解压至指定目录试试
[root@rhel6 test]# rm loo/ab* -f
[root@rhel6 test]# ls loo/
lo
[root@rhel6 test]# tar -jxvf bzip2.tar.bz2 loo/ab.gz loo/abc.gz -C loo/
loo/ab.gz
loo/abc.gz
[root@rhel6 test]# ls loo/
abc.gz ab.gz lo
从这里可以看到,我们将压缩文件中loo/ab.gz loo/abc.gz两个文件成功解压到了当前目录的loo目录下!
指定不压缩某些文档
–exclude=file,指定的file即为排除在外的列表
[root@rhel6 test]# ls loo/
abc.gz ab.gz lo
[root@rhel6 test]# tar -jcvf loo.tar.bz2 loo/ –exclude=ab.gz
loo/
loo/abc.gz
loo/lo/
loo/lo/abcd.gz
[root@rhel6 test]# tar -tf loo.tar.bz2
loo/
loo/abc.gz
loo/lo/
loo/lo/abcd.gz
可以看到我们已经将loo/ab.gz排除在外了。loo.tar.bz2并没有被压缩进来。
将较新的文件添加进压缩包
–newer可以将ctime,mtime比指定时间新的文件添加进去
–newer-mtime则指定只是mtime比较新的被添加
[root@rhel6 test]# tar -tf bzip2.tar.bz2
loo/
loo/ab.gz
loo/abc.gz
loo/lo/
loo/lo/abcd.gz
ssh_config
libgtkmm-2.4.so.1
[root@rhel6 test]# date
2011年 11月 15日 星期二 23:31:50 CST
[root@rhel6 test]# ls
bzip2.tar.bz2 libgtkmm-2.4.so.1 loo root single ssh_config user
[root@rhel6 test]# touch 2332
[root@rhel6 test]# mkdir -p 2333/2334
[root@rhel6 test]# tar -jcf bzip2.tar.bz2 –newer=”2011/11/15 23:31:50″ *
[root@rhel6 test]# tar -tf bzip2.tar.bz2
2332
2333/
2333/2334/
loo/
loo/lo/
root/
root/loo/
root/loo/lo/
single/
user/
user/loo/
user/loo/lo/
这里可以看到,我们新建的文件2332和新建的目录2333及子目录2334都被添加进了bzip2.tar.bz2里面。而以前的文件则未被添加。