我们在使用tar打包的时候,默认会把路径打进去,也就是说解包的时候是带路径的,如下:
1、在/root/下有t1.txt和t2.txt 两个文件:
[root ~]$ ll
-rw-r--r-- 1 root root 3 Jun 6 12:09 t1.txt
-rw-r--r-- 1 root root 3 Jun 6 12:09 t2.txt
2、将这两个文件归档:
[root ~]$ tar -cvzf t.tar /root/t1.txt /root/t2.txt
tar: Removing leading `/' from member names
/root/t1.txt
/root/t2.txt
[root ~]$ ll
-rw-r--r-- 1 root root 3 Jun 6 12:09 t1.txt
-rw-r--r-- 1 root root 3 Jun 6 12:09 t2.txt
-rw-r--r-- 1 root root 138 Jun 6 12:10 t.tar
3、将t.tar包拷贝到/data目录下然后解压:
[root ~] $ mv t.tar /data/
[root ~] $ cd /data/
[root data]$ tar -xvzf t.tar
root/t1.txt
root/t2.txt
此时,我们可以看到,在/data下自动建立了root目录,然后把t1、t2两个文件放进去了
[root data]$ ll /data/root/
total 8
-rw-r--r-- 1 root root 3 Jun 6 12:09 t1.txt
-rw-r--r-- 1 root root 3 Jun 6 12:09 t2.txt
一、解决打包不包含路径问题
1、进入目录内,执行打包命令:
$ cd /root/test
$ pwd
/root/test
$ ll
-rw-r--r-- 1 root root 0 Jun 6 12:15 t1.txt
-rw-r--r-- 1 root root 0 Jun 6 12:15 t2.txt
$ tar -cvzf tt.tar *
t1.txt
t2.txt
$ ll
total 4
-rw-r--r-- 1 root root 0 Jun 6 12:15 t1.txt
-rw-r--r-- 1 root root 0 Jun 6 12:15 t2.txt
-rw-r--r-- 1 root root 121 Jun 6 12:15 tt.tar
这时,打的tt.tar就不包含路径了,把tt.tar拷贝到/data 下,然后解压:
$ mv tt.tar /data/
[root]$ cd /data/
[root]$ tar -xvzf tt.tar
t1.txt
t2.txt
[root]$ ll
-rw-r--r-- 1 root root 0 Jun 6 12:15 t1.txt
-rw-r--r-- 1 root root 0 Jun 6 12:15 t2.txt
2、使用-C 参数:
也需要进入对应目录
$ cd /root/test
$ pwd
/root/test
$ ll
-rw-r--r-- 1 root root 0 Jun 6 12:15 t1.txt
-rw-r--r-- 1 root root 0 Jun 6 12:15 t2.txt
$ tar -cvf ttt.tar -C /root/test/ *
t1.txt
t2.txt
$ ll
total 12
-rw-r--r-- 1 root root 0 Jun 6 12:15 t1.txt
-rw-r--r-- 1 root root 0 Jun 6 12:15 t2.txt
-rw-r--r-- 1 root root 10240 Jun 6 12:28 ttt.tar
当然,可以直接把tar包打到指定位置:
$ pwd
/root/test
$ tar -cvf /data/ttt.tar -C /root/test/ *
t1.txt
t2.txt
二、解压tar包到指定位置:
通过上面,我们可以把文件直接打进tar包,不包含目录。当我们解压时,需要建立好对应的目录(和scp比一样,scp会自动建立),然后使用-C 指定解压的位置。(注:前提是tar打的包不包含路径)
$ cd /data
$ mkdir abc
$ pwd
/data
$ tar -C /data/abc/ -xvf ttt.tar
t1.txt
t2.txt
$ cd abc/
$ ll
total 0
-rw-r--r-- 1 root root 0 Jun 6 12:15 t1.txt
-rw-r--r-- 1 root root 0 Jun 6 12:15 t2.txt