首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查symlink目标是否与特定路径匹配?

如何检查symlink目标是否与特定路径匹配?
EN

Stack Overflow用户
提问于 2013-11-08 21:34:22
回答 2查看 13.2K关注 0票数 21

我正在创建一个bash脚本来检查symlink目标是否与特定路径匹配,因此,如果不匹配,脚本将删除symlink。我试过用readlink

代码语言:javascript
复制
#!/bin/env bash

target_path=$HOME/Code/slate/.slate.js

if [ `readlink $HOME/.slate.js` == "$target_path" ]; then
    rm -rf "$HOME/.slate.js"
fi

但它不起作用:

代码语言:javascript
复制
%source test
test:5: = not found
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-08 21:44:56

在比较字符串时,应该使用双引号,如下所示(是的,readlink $HOME/.slate.js的输出是一个字符串):

代码语言:javascript
复制
[ "$(readlink $HOME/.slate.js)" = "$target_path" ]
票数 26
EN

Stack Overflow用户

发布于 2015-04-10 02:46:21

如果$target_path与链接文本不完全匹配,您可以检查它们实际上是否等效(无论名称如何)。但由于硬链接更可取,你可能也想检查这种情况(见下文)。

更通用的解决方案是:

代码语言:javascript
复制
[ "$(readlink $HOME/.slate.js)" -ef "$target_path" ]

或者,如您的示例所示:

代码语言:javascript
复制
target_path=$HOME/Code/slate/.slate.js

if [ "`readlink $HOME/.slate.js`" -ef "$target_path" ]; then
    rm -rf "$HOME/.slate.js"
fi

但所有这些都假设您的$HOME/.slate.js是一个符号链接。如果它是一个硬链接(如果可能的话,最好是硬链接),那么它会更简单:

代码语言:javascript
复制
 … [ "$HOME/.slate.js" -ef "$target_path" ] …

可能类似于(检查它是否是符号链接,如果是,则检查链接是否与目标匹配;否则检查文件是否相同-要么是硬链接,要么实际上是同一个文件):

代码语言:javascript
复制
 … [ \( -L "$HOME/.slate.js" -a "`readlink $HOME/.slate.js`" -ef "$target_path" \) \
     -o \( "$HOME/.slate.js" -ef "$target_path" \) ] …

您还应该检查该文件是否确实是相同的文件(而不是硬链接),否则将删除唯一的副本。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19860345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档