|
发表于 2004-4-14 09:12:21
|
显示全部楼层
解决一个任务的方法有很多,这个是必然的。就像以前777兄以及现在javalee兄的脚本,它们都能在大多数情况下解决问题。但是,正如我一直所强调的,代码需要强壮性,这个概念不仅是高级语言要遵守,shell代码也同样不例外。
777兄分析ls的结果来判断软链接的有效性,这对于Linux大多数发行版本而言结果是正确的,但对于Unix变种甚至一些发行版本(不同的ls)是走不通的,因为777兄分析的条件是固定的域位置。
至于javalee兄的脚本,它使用file。注意,file可能存在同样的移植问题,它在不同的机器上出错表示可能是不一样的。(这里强调的是可能,因为file是外部命令)。
我个人的意见是,最好使用bash内置的功能来完成任务。众所周知,shell是最具移植性的,它的状态在各系统上保持了最大的一致性。这样一来,强壮性就得到了最大的保证。
请看我的脚本的代码片断:
- ...
- linklist=$(find $1 -${DEPTH:-"depth"} -type l |xargs)
- for i in $linklist; do
- [ ! -s $i ] && rm -${INTERACTIVE:-"i"} $i
- done
- ...
复制代码
1. javalee兄提及"用-s file来判断链接,我想不太恰当,因为会有跟多文件是空的"
注意,我是在用find命令后使用test的,也就是说,test的对象是链接文件。再者,一个软链接的目标文件消失后,与目标文件存在相比,-s的返回值不同。
2. test是bash内置命令,所以它的移植性能最好,脚本的强壮性也同时提升了。
个人意见,仅供参考。 |
|