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

Posted

技术标签:

【中文标题】如何获取符号链接的目标?【英文标题】:How do I get the target of a symlink? 【发布时间】:2009-08-06 09:45:00 【问题描述】:

我有一个字符串,其中包含指向现有符号链接的文件系统路径。我想得到这个链接指向的路径。

基本上,我想要通过这种黑客攻击获得的相同:

s = "path/to/existing/symlink"
`ls -ld #s`.scan(/-> (.+)/).flatten.last

但我想做到这一点而不用炮轰。

【问题讨论】:

顺便说一下,在 bash 中它也只是 readlink path/to/symlink。永远不要解析ls 的输出。 【参考方案1】:

我认为readlink 是您正在寻找的:

File.readlink("path/to/symlink")

【讨论】:

请注意,如果符号链接是相对的或存在符号链接链,这将不会跟随所有链接或返回完整路径 -Pathname#realpath 会。 @mfazekas,感谢您指出这一点;我想知道这是否真的是OP想要的; ls -ld ... 也没有给出真正的路径。【参考方案2】:
require 'pathname'
Pathname.new("symlink").realpath

或像其他人所说的那样阅读链接

【讨论】:

而不是 Pathname.new("/path/to/symlink").realpath.to_s :) .. 这绝对比使用 system() 好【参考方案3】:

或者你可以试试:

File.realpath("symlink_path")

这适用于符号链接和普通文件。

【讨论】:

以上是关于如何获取符号链接的目标?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .Net 获取符号链接(或重解析点)的目标?

Bash 脚本实例:获取符号链接的目标位置

获取符号链接目标的卷名的最佳方法 [NTFS]

如何在 Node.js 中读取符号链接

gcc 链接器如何获取函数的大小?

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