如何检查提供的路径是符号链接还是常规路径

Posted

技术标签:

【中文标题】如何检查提供的路径是符号链接还是常规路径【英文标题】:how to check if the provided path is a symlink or a regular path 【发布时间】:2014-04-11 05:26:05 【问题描述】:

我不是 powere shell 脚本程序员,这可能是基本的,但我需要知道?

我有一个路径 /user/home/san/drive2

其中 drive2 是指向

的符号链接

/drive 在根级别,所以使用 shell 脚本中的什么命令我可以检查路径是符号链接还是常规路径?

另外,任何路径都可能遇到符号链接,那么我们如何在每个路径分隔符之后递归检查它是否是符号链接?

【问题讨论】:

How to check if symlink exists的可能重复 【参考方案1】:

注意lstat() 函数。

在此检查st_mode 字段中:S_ISLNK(m)

或者你可以做类似的事情

if [ -L /path/to/file ]; then
  echo "is a symlink!"
else
  echo "not a symlink! maybe a directory or regular file, or does not exist"
end

【讨论】:

【参考方案2】:

您可以使用readlink -f /user/home/san/drive2 获取后面的规范 路径。也就是说,没有任何符号链接的实际路径。一个推论是,如果 readlink -f 的结果与您提供给它的参数有任何不同,那么在原始路径中的某处有一个符号链接。

【讨论】:

以上是关于如何检查提供的路径是符号链接还是常规路径的主要内容,如果未能解决你的问题,请参考以下文章

如何使用短完整路径创建符号链接?

Linux命令:pwd

在带有符号链接的可执行文件中使用相对路径

如何在主机和来宾机器之间的共享 nfs 目录中映射符号链接目标路径?

如何从确定的路径中删除 usr/local/include 中的所有符号链接

如何获取符号链接的目标?