免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7585 | 回复: 9
打印 上一主题 下一主题

tar命令打包文件的顺序,看似简单,确很少人能回答上。。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-08 21:26 |只看该作者 |倒序浏览
20可用积分
我用Ubuntu Server,最近碰到了一个奇怪的问题,在很多论坛,邮件列表问过,都没得到答案。

最早用的版本是6.06,用tar czvf备份Subversion目录,压缩时,文件的打包顺序非常好,象:
......
svn/revprops/89
svn/revprops/90
svn/revprops/91
..........
svn/revs/57
svn/revs/58
svn/revs/59
svn/revs/60
svn/revs/61
.......

是先按目录顺序,然后是目录中文件的时间顺序。

之后,我又试过7.04和7.10,用同一个脚本备份,文件打包顺序完全是乱的:
..........
dependencies/db/revs/94
dependencies/db/revs/98
dependencies/db/revs/53
dependencies/db/revs/117
dependencies/db/revs/62
dependencies/db/revs/122
dependencies/db/revs/1

我试着把6.06的tar取代7.04/7.10的,也试着只用 tar cvf (没有压缩),都不行。 另,全部的Ubuntu都用ext3文件系统。

tar命令应该很简单,没有什么配置文件,现在我怀疑是tar命令依赖于某些命令。可根本不得要领。如何能让7.x版本象6.04那样工作?

论坛徽章:
0
2 [报告]
发表于 2008-01-08 22:10 |只看该作者
嗯,是有点奇怪,

刚才试了一下,发现旧版的 tar 是按 inum 来排序再打包的,

新版的取消了该功能,不知道是不是为了加快速度呢

论坛徽章:
0
3 [报告]
发表于 2008-01-08 22:30 |只看该作者
如果你非要排序打包可以这样看看

  1. touch a.tar
  2. for i in $(ls -R|sort)
  3. do
  4. tar rf a.tar  $i
  5. done
复制代码

论坛徽章:
0
4 [报告]
发表于 2008-01-08 23:09 |只看该作者
楼上的方法测试一下,是通不过的,不知道楼上用到是什么OS
我使用Centos 5 测试是通不过的,

因为for 是一个循环, ls -R|sort  假如,A B C 目录是,
当打B目录(或C目录)打包是会覆盖a.tar,所以只剩下最后给打包目录或文件,

建议这样使用
到打包当前目录下
tar -zcvf /tmp/a.tar `ls -R|sort`

论坛徽章:
0
5 [报告]
发表于 2008-01-09 08:55 |只看该作者
原帖由 luo118 于 2008-1-8 23:09 发表
楼上的方法测试一下,是通不过的,不知道楼上用到是什么OS
我使用Centos 5 测试是通不过的,

因为for 是一个循环, ls -R|sort  假如,A B C 目录是,
当打B目录(或C目录)打包是会覆盖a.tar,所以只剩下最后给打包 ...


回楼上的话,我的系统是CentOS5.1 x86_64的
请你看清楚,我用的是 “tar -rf ./a.tar ” 而不是 “tar -cf ./a.tar”
如果方便的话,麻烦你再测试一下。

论坛徽章:
0
6 [报告]
发表于 2008-01-09 10:12 |只看该作者

回复 #5 xinyv 的帖子

哦,昨晚太晚眼力不好使,看错了, sorry
-r 是可以的,

论坛徽章:
0
7 [报告]
发表于 2008-01-09 12:57 |只看该作者
把所有这些文件和目录拷贝到一个新的分区上,然后在新的分区上tar 这些文件和目录,就很可能能顺序tar下来。

另外,我不知道为什么一定要顺序tar下来,有什么特别的原因。

论坛徽章:
0
8 [报告]
发表于 2008-01-11 18:46 |只看该作者
我试过楼上的,不行。
也在centos4.6上试过,也不行。

感谢二,三楼的方案,不过我真的想知道具体的原因,而不是解决方案,而且两位的方案也不完全成功。 

之所以要tar要顺序,由于一些原因,我通常是手工操作,如果是按顺序的tar,我很容易看到当前的最新版本号是什么。

论坛徽章:
0
9 [报告]
发表于 2008-01-11 18:52 |只看该作者
另,这个问题应该和tar命令本身没关系,ubuntu6.06的tar版本是1.15.1, centOS4.6是1.14,还有ubuntu7.x是更新的tar.

试下,
touch d/1.txt
touch d/2.txt
touch d/3.txt
tar czvf d.tar.gz d/

在ubuntu6.06下总是按顺序,在centOS下,就是很乱,真是没办法。。。。

论坛徽章:
0
10 [报告]
发表于 2011-10-14 16:07 |只看该作者
我也遇到这个问题。想明白。。我觉得可能你最好直接发到软件作者那边去。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP