博客首页 注册 建议与交流 排行榜 加入友情链接         宝宝相册的专门空间
推荐 投诉 搜索: 帮助

星瞳——吾爱

初步打算,除了自己喜欢的文章,也尽量贴些原创文章和照片什么的----2005.01.04
pax的最酷选项
    loveunix最近在讨论pax、tar等备份命令的差别。拉风提到pax有将绝对路径转为相对路径的能力。在网上搜了搜,找到两点:
1、pax不仅可以处理pax文件,而且可以处理tar文件
2、pax 最酷的功能是其-s 选项,允许在向存档写文件、从存档提取文件或列举其中的
文件时发出文件名消息。它以ed 或sed 中使用的替换命令作为参数(通常需要包含
在单引号中),表明如何对文件名进行转换。例如,下面的命令在从存档读取文件时,
把每个文件的第二级目录名chavez 更改为harvey,改变它们在磁盘上的目标位置:
$ pax -r -s ',^/home/chavez/,/home/harvey/,' \
-f /dev/rmt0 /home/chavez

    早上来公司迫不及待地试了一下,两点都得到验证。过程如下:
08:59:35 root@VIOC:[/test]#ls -l
total 27072
-rw-r--r--   1 root     system         3805 Dec 19 10:44 .toc
-rw-r-----   1 root     system     13854720 Dec 19 10:43 bos.sysmgt
08:59:38 root@VIOC:[/test]#tar -cvf /test.tar /test
a /test
a /test/bos.sysmgt 27060 blocks.
a /test/.toc 8 blocks.
08:59:53 root@VIOC:[/test]#mkdir test2
09:00:00 root@VIOC:[/test]#cd test2
09:00:03 root@VIOC:[/test/test2]#pax -s:/.*/:./: -rvf /test.tar
USTAR format archive
/test
./bos.sysmgt
./.toc
09:00:10 root@VIOC:[/test/test2]#ls -l
total 27080
-rw-r--r--   1 root     system         3805 Dec 19 10:44 .toc
-rw-r-----   1 root     system     13854720 Dec 19 10:43 bos.sysmgt
09:00:15 root@VIOC:[/test/test2]#

    又想到,如果在tar的时候源目录里包含子目录会怎么样呢?根据需要,灵活地改一下-s:/.*/:./:就可以了。过程如下:
09:02:16 root@VIOC:[/test/test2]#touch a b c
09:14:08 root@VIOC:[/test/test2]#tar -cvf /test.tar /test
a /test
a /test/bos.sysmgt 27060 blocks.
a /test/.toc 8 blocks.
a /test/test2
a /test/test2/bos.sysmgt 27060 blocks.
a /test/test2/.toc 8 blocks.
a /test/test2/a 0 blocks.
a /test/test2/b 0 blocks.
a /test/test2/c 0 blocks.
09:14:21 root@VIOC:[/test/test2]#mkdir test3
09:14:28 root@VIOC:[/test/test2]#cd test3
09:14:31 root@VIOC:[/test/test2/test3]#pax -s:/.*/:./: -rvf /test.tar
USTAR format archive
/test
./bos.sysmgt
./.toc
./test2
./bos.sysmgt
./.toc
./a
./b
./c
09:14:39 root@VIOC:[/test/test2/test3]#ls -l
total 27080
-rw-r--r--   1 root     system         3805 Dec 19 10:44 .toc
-rw-r--r--   1 root     system            0 Dec 21 09:14 a
-rw-r--r--   1 root     system            0 Dec 21 09:14 b
-rw-r-----   1 root     system     13854720 Dec 19 10:43 bos.sysmgt
-rw-r--r--   1 root     system            0 Dec 21 09:14 c
drwxr-xr-x   2 root     system          256 Dec 21 09:14 test2
09:14:42 root@VIOC:[/test/test2/test3]#cd test2
09:14:52 root@VIOC:[/test/test2/test3/test2]#ls
09:14:53 root@VIOC:[/test/test2/test3/test2]#cd ..
09:15:33 root@VIOC:[/test/test2/test3]#cd ..
09:15:35 root@VIOC:[/test/test2]#rm -r *
09:15:40 root@VIOC:[/test/test2]#mkdir test3
09:15:44 root@VIOC:[/test/test2]#cd test3
09:15:47 root@VIOC:[/test/test2/test3]#pax -s:/:./: -rvf /test.tar
USTAR format archive
./test
./test/bos.sysmgt
./test/.toc
./test/test2
./test/test2/bos.sysmgt
./test/test2/.toc
./test/test2/a
./test/test2/b
./test/test2/c
09:16:10 root@VIOC:[/test/test2/test3]#ls -l
total 0
drwxr-xr-x   3 root     system          256 Dec 21 08:59 test
09:16:16 root@VIOC:[/test/test2/test3]#find . -ls
12288    0 drwxr-xr-x  3 root      system         256 Dec 21 09:16 .
12352    0 drwxr-xr-x  3 root      system         256 Dec 21 08:59 ./test
12353 13532 -rw-r-----  1 root      system    13854720 Dec 19 10:43 ./test/bos.sysmgt
12354    4 -rw-r--r--  1 root      system        3805 Dec 19 10:44 ./test/.toc
12289    0 drwxr-xr-x  2 root      system         256 Dec 21 09:14 ./test/test2
12290 13532 -rw-r-----  1 root      system    13854720 Dec 19 10:43 ./test/test2/bos.sysmgt
12291    4 -rw-r--r--  1 root      system        3805 Dec 19 10:44 ./test/test2/.toc
12292    0 -rw-r--r--  1 root      system           0 Dec 21 09:14 ./test/test2/a
12293    0 -rw-r--r--  1 root      system           0 Dec 21 09:14 ./test/test2/b
12294    0 -rw-r--r--  1 root      system           0 Dec 21 09:14 ./test/test2/c
09:16:26 root@VIOC:[/test/test2/test3]#
 
    小结:-s的确是pax最酷的选项,如果谁用tar打包文件时忘了用相对路径,那pax可以帮他一个忙。不过谁用tar打包时,会用绝对路径呢?
 
========================================================================
任何形式的转载,请写明出处:
email: beginner@yeah.net
blog: http://blog.chinaunix.net/index.php?blogId=739   http://www.cublog.cn/u/739/
========================================================================
 

发表于: 2007-12-21,修改于: 2007-12-21 09:31,已浏览396次,有评论2条 推荐 投诉
网友: fck 时间:2008-03-11 09:41:59 IP地址:218.61.34.★
很好,这个有点看不明白。
pax -s:/.*/:./: -rvf /test.tar

网友: beginner-bj 时间:2008-03-11 18:58:44 IP地址:61.144.248.★
这个写法跟sed是一样的


给我留言
版权所有 ChinaUnix.net 页面生成时间:6.90486