LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1017|回复: 10

判断路径的唯一性[已解决]

[复制链接]
发表于 2004-4-9 09:51:09 | 显示全部楼层 |阅读模式
有N个路径名,它们中间有些可能指向同一个物理路径(尽管路径名不一样),比如~,/root,/root/Desktop/../,再如~user, /home/user, $HOME。
如何使用命令来判断它们的唯一性呢?

其实这个问题出自我最近编写的一个"协同进程"示例脚本的其中一个函数checkidt(),详见
http://www.linuxsir.cn/bbs/showt ... d=574321#post574321

我使用了stat命令根据目录的inode(stat -c %i <directory>)来判断路径的唯一性。可能大家有更好的方法,不妨交流一下。
发表于 2004-4-9 12:35:03 | 显示全部楼层
  1. ls -i
复制代码

也可列inode
 楼主| 发表于 2004-4-9 12:52:21 | 显示全部楼层
好,原来ls也能列出inode,呵呵~~
那请r2007兄评论一下在下的mcp脚本。协同程序,一个吸引人的话题,可惜在下没有超线程CPU,呵呵~~~
要实现并行化,难免额外的开销进行协调以及排错,这样一来就抵消了并行化的效率提升,如何把这类开销减至最小,是协同程序的关键。
发表于 2004-4-9 13:16:06 | 显示全部楼层
如果瓶颈是磁盘访问速度,甚至n颗CPU也徒劳
 楼主| 发表于 2004-4-9 13:42:52 | 显示全部楼层
当然,还得考虑磁盘I/O。
同样详见:
http://www.linuxsir.cn/bbs/showt ... d=574321#post574321
我引用了三个衡量"并行化"质量的标准。
 楼主| 发表于 2004-4-9 16:13:54 | 显示全部楼层
已经改进了原脚本,效率提升了一倍。请重温,呵呵~~~
协同程序,很不容易啊。
发表于 2004-4-9 21:50:48 | 显示全部楼层
find也可一哟。


  1. find ~test -maxdepth 0 -printf '%i\n'
  2. find /home/test -maxdepth 0 -print '%i\n'
  3. ...
复制代码


还有就是不用inode也是可以的。

  1. find $HOME -maxdepth 0
  2. find ~test -maxdepth 0
复制代码

find 就可以返回物理绝对路径。
发表于 2004-4-9 21:54:30 | 显示全部楼层
  1. stat -Lc %i
复制代码

加上-L参数更严谨。
ls命令也一样
 楼主| 发表于 2004-4-9 21:59:13 | 显示全部楼层
最初由 r2007 发表
  1. stat -Lc %i
复制代码

加上-L参数更严谨。
ls命令也一样

嗯,谢谢r2007兄的提醒,这是个bug哦,呵呵~~我立即修正。
 楼主| 发表于 2004-4-9 22:07:53 | 显示全部楼层
to yongjian:
嗯,我很欣赏find命令的强大,刚才看了一下UNIX痛恨者这本电子文档,感到很搞笑,呵呵~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表