Chinaunix

标题: 请问tar 如何将系统文件夹压缩成一个binary.tar [打印本页]

作者: incle    时间: 2014-09-17 15:19
标题: 请问tar 如何将系统文件夹压缩成一个binary.tar
系统文件夹如下:
boot  dev   home  include  lost+found  mnt    opt

现在要把这些文件及文件夹打包成binary.tar,要求在解压时它会在 binary/下。
(就是说它系统文件夹必须前面有个binary/的前缀。)
如:
tar tvf  bianry.tar
binary/boot
binary/boo/xx
binary/dev
binary/dev/yy


大家有什么办法吗?
作者: incle    时间: 2014-09-17 15:26
现在我的办法比较笨,就是在根目录下创建一个bianry/文件夹。
然后把所有的系统文件夹都拷进bianry/中
最后tar 打包。

想写成脚本来处理,但总觉得这个方法有点不灵活,(还要排除在根目录下非系统文件夹)因为系统文件很多很大,又要复制又打包,很花时间。
有没有一种方法可以不用复制而直接打包,但又能兼顾上面要求?
作者: bulletmarquis    时间: 2014-09-17 15:41
必须要求tar包里面有一层目录么?如果可以修改解压那一端,可以设定解压到指定目录下
  1. mkdir destDir
  2. tar zxvf xx.tar.gz -C destDir
复制代码

作者: incle    时间: 2014-09-17 15:46
回复 3# bulletmarquis
不可以设定解压那一端,因为那个tar包是要给第三方的软件去处理的。

   
作者: bulletmarquis    时间: 2014-09-17 16:55
回复 4# incle


    想不出好的办法,实在不行,就使用P参数吧,把绝对路径中第一个/给去掉
  1. tar zcvfP test.tar.gz /home/test/xxx
复制代码
这样解压不用P参数的话,只会解压到当前目录下
  1. $(pwd)/home/test/xxx
复制代码

作者: chengchow    时间: 2014-09-17 17:31
tar -zcPpf binary.rar.gz file1 file2 ... filen
解压
tar -zxPpf binary.rar.gz
作者: incle    时间: 2014-09-17 17:41
bulletmarquis 发表于 2014-09-17 16:55
回复 4# incle

这个还是不行,P只满足了不会解压到原目录的情况。(第三方软件要用到这个tar包,不是我们自己控制。)
但是要求的要包在binary/里还是很难做得到。
作者: incle    时间: 2014-09-17 17:43
回复 6# chengchow


    包里没有binary/这个前缀是不行的。
作者: bulletmarquis    时间: 2014-09-18 08:57
想不出办法了。。。
LZ找到好主意的时候,记得@我哈
作者: incle    时间: 2014-09-18 09:30
回复 9# bulletmarquis


    好的。
作者: blackold    时间: 2014-09-18 10:54
回复 1# incle
  1. tar -cf binary.tar --xform 's,^./,binary/,' .
复制代码

作者: yestreenstars    时间: 2014-09-18 11:12
回复 11# blackold

牛,学习了!
   
作者: yestreenstars    时间: 2014-09-18 11:22
结合楼主的情况和黑哥的方法:
  1. tar czvf binary.tar.gz --xform 's#^#binary/#' /boot /dev /home /include /lost+found /mnt /opt
复制代码

作者: incle    时间: 2014-09-19 11:45
blackold 发表于 2014-09-18 10:54
回复 1# incle


这方法果然不错,高手!
谢谢了。
作者: incle    时间: 2014-09-19 11:48
yestreenstars 发表于 2014-09-18 11:22
结合楼主的情况和黑哥的方法:

也谢谢你
作者: bulletmarquis    时间: 2014-09-23 15:21
回复 15# incle


    刚刚突然想到一个办法,建立一个目录的软链接,ln -s /dirA /dirB/dirA,然后用tar将/dirB/dirA打包,解压即可解决LZ问题

   兴冲冲的过来表功,原来已有其他大神给出方法了


    BS楼楼,说好的有办法要@我的哩。。。
作者: yestreenstars    时间: 2014-09-23 17:26
回复 16# bulletmarquis

这样不行吧?
   
作者: bulletmarquis    时间: 2014-09-23 17:28
回复 17# yestreenstars


    我在suse11的环境上测试是可以的
作者: yestreenstars    时间: 2014-09-23 17:59
本帖最后由 yestreenstars 于 2014-09-23 18:01 编辑

回复 18# bulletmarquis

我在CentOS下测试不行,我是这样做的:
  1. [root@localhost ~]# mkdir /test
  2. [root@localhost ~]# ln -s /boot /test/boot
  3. [root@localhost ~]# tar czf test.tar.gz /test
  4. tar: Removing leading `/' from member names
  5. [root@localhost ~]# tar tzf test.tar.gz
  6. test/
  7. test/boot
  8. [root@localhost ~]#
复制代码

作者: bulletmarquis    时间: 2014-09-24 09:06
本帖最后由 bulletmarquis 于 2014-09-24 09:14 编辑

回复 19# yestreenstars


    我的测试方法:
  1. mkdir test1
  2. cd test1;touch {a..f};cd -
  3. ln -s /test1 /test2
  4. tar zcvf testA.tar.gz /test2
  5. tar zcvf testB.tar.gz /test2/*
复制代码
解压后发现,testA.tar.gz 解压出来的test2,仍然是一个软链接,testB.tar.gz 解压出来的效果正常

   多加一层目录也是一样的
  1. mkdir test1
  2. cd test1;touch {a..f};cd -
  3. ln -s /test1 /test2/test1
  4. tar zcvf testA.tar.gz /test2
  5. tar zcvf testB.tar.gz /test2/test1/*
复制代码
testA.tar.gz 解压后是链链接,testB.tar.gz解压出来的目录是正常的
  1. tar zxvf testB.tar.gz
  2. test2/test1/a
  3. test2/test1/b
  4. test2/test1/c
  5. test2/test1/d
  6. test2/test1/e
  7. test2/test1/f
复制代码

作者: yestreenstars    时间: 2014-09-24 09:36
回复 20# bulletmarquis

我试了一下,确实可以,不过貌似有点麻烦,还是黑哥那个好用。
   
作者: bulletmarquis    时间: 2014-09-24 09:46
回复 21# yestreenstars

确实,还是黑哥威武。。。
   
作者: incle    时间: 2014-09-25 09:10
bulletmarquis 发表于 2014-09-23 15:21
回复 15# incle
  接受你的BS,一看到好的方法高高兴的就去试,结果就把兄弟前说的话给忘了。
你的方法 我也试了,我在 ubuntun上试好像不行。 所以才到这发贴的。
作者: bulletmarquis    时间: 2014-09-25 09:15
回复 23# incle


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2