设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
Linux 综合讨论区 —— LinuxSir.cn
›
shell进阶应用、shell编程
›
判别若干个路径指向相同的难题
返回列表
查看:
737
|
回复:
8
判别若干个路径指向相同的难题
[复制链接]
grampus
grampus
当前离线
积分
70
IP卡
狗仔卡
发表于 2003-6-27 00:57:43
|
显示全部楼层
|
阅读模式
若有 /abc/xyz, ~/efg/bak/hello.java, /home/orca/bak/hello.java,
/abc/aaa,....
若干个路径。在bash中怎样编程判别若干个路径指向相同。
例如:~/efg/bak/hello.java, /home/orca/bak/hello.java指向同一文件。
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
grampus
grampus
当前离线
积分
70
IP卡
狗仔卡
楼主
|
发表于 2003-6-27 01:01:04
|
显示全部楼层
补充
在编写多目标copy脚本时,十分有用。
必须识别指向相同的目标路径。
mcp source dest1 dest2 ...
回复
支持
反对
使用道具
举报
显身卡
lucida
lucida
当前离线
积分
2492
IP卡
狗仔卡
发表于 2003-6-27 05:24:29
|
显示全部楼层
一般的判断用dirname就行
比如
fancyworld lucida $ dirname ~lucida/myfile
/home/lucida
fancyworld lucida $ dirname /home/lucida/myfile
/home/lucida
如果涉及到相对路径(比如../../a/b/c实际等于/some/path/to/a/b/c)
我知道的办法只有
cd $(dirname ../../a/b/c/myfile)
abspath=$(pwd)
cd -
回复
支持
反对
使用道具
举报
显身卡
idkey
idkey
当前离线
积分
366
IP卡
狗仔卡
发表于 2003-6-27 10:40:50
|
显示全部楼层
我想比较inode会是个好办法
FILE=~/bin
INODE=`/bin/ls -1di $FILE | sed -e 's/^[ ]*//' -e 's/[ ].*$//'`
回复
支持
反对
使用道具
举报
显身卡
lucida
lucida
当前离线
积分
2492
IP卡
狗仔卡
发表于 2003-6-27 10:57:46
|
显示全部楼层
这个也不能处理相对路径....
回复
支持
反对
使用道具
举报
显身卡
LYOO
LYOO
当前离线
积分
782
IP卡
狗仔卡
发表于 2003-6-27 11:19:51
|
显示全部楼层
grampus主要想确定mcp source dest1 dest2 ...中dest1、dest2...所指定的这些目录是否为同一个目录:
idkey的方法可以判断符号链接,如果它们的inode值相同,指的就是同一个目录,但不能处理相对路径,因为这是shell定义的;penny的方法可以处理相对路径,但不能处理符号链接。
将两人的方法结合一下,先扫描相对路径,再判断inode值,就OK了。
回复
支持
反对
使用道具
举报
显身卡
grampus
grampus
当前离线
积分
70
IP卡
狗仔卡
楼主
|
发表于 2003-6-27 20:18:35
|
显示全部楼层
补充说明
可能是我没解释清楚。
mcp source dest1 dest2 ...
这dest1,dest2...可能是用户指定的目标文件,也可能只是一个目录。
所以不能仅假设是目录或文件。所以需要分别处理。
还有以使用cp的常识,我们知道,dest1...可能在指定时并不存在。
所以用inode判断要选建立一个临时文件。
回复
支持
反对
使用道具
举报
显身卡
idkey
idkey
当前离线
积分
366
IP卡
狗仔卡
发表于 2003-6-28 20:48:21
|
显示全部楼层
> idkey的方法可以判断符号链接,如果它们的inode值相同,指的
> 就是同一个目录,但不能处理相对路径,因为这是shell定义的;
> penny的方法可以处理相对路径,但不能处理符号链接。
不知道你什么意思。就因为相对路径的写法不一样就不是同一个对象、不是相同的inode了吗?还是好好温习一下filesystem的概念吧。不管你用什么名字引用它,链接也好、100种相对路径的写法也好,你最后访问的还是fs中的数据块;而fs如何区分不同的数据块呢,在ext2里,就是inode,节点索引。它在整个partition中是唯一的值呀,sir。如果一个目录(也包括文件),就因为访问它是通过链接或者n种相对路径的写法,它的inode就会不一样,那ext2驱动和硬盘控制器还不得疯掉,嘿嘿。
> 所以不能仅假设是目录或文件。所以需要分别处理。
> 还有以使用cp的常识,我们知道,dest1...可能在指定时并不存在。
> 所以用inode判断要选建立一个临时文件。
忘了shell可以判断一个目录、文件是否存在吗?
if [ -f source ]; then
[ -f $dest1 ] || ( [ -d `dirname $dest1` ] || mkdir -p `dirname $dest1` ); touch $dest1
[ -f $dest2 ] || ( [ -d `dirname $dest2` ] || mkdir -p `dirname $dest2` ); touch $dest2
# then check inodes & copy
...
else if [ -d source ]; then
[ -d $destdir ] || mkdir -p $destdir
[ -d $destdir2 ] || mkdir -p $destdir2
# then check inodes & copy
...
else
echo "Source $source does not exists"
fi
fi
瞎写的,检测还不严格,没有考虑目标即可以是目录也可以是文件的境况等等,而且我也没有调试,仅供参考。
回复
支持
反对
使用道具
举报
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2003-6-28 21:44:49
|
显示全部楼层
idkey兄的方法是有道理的,不过文件的名字如何变化,链接也好,别名也罢,他的inode是唯一的!
我建议楼主把自己的文档帖出来,便于我们大家分析,没有必要为一个概念争来争去,因为概念(理论)是死的,如何应用却是灵活的!
个人看法,供参考!;)
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
LFS(LinuxfromScratch)
Linux小型、嵌入式系统
开源软件专题讨论
Android 讨论区
PHP
Javascript文档
Linux 输入开发与研究
BSD 讨论专题
Linux 发行版其他专题
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表