如何在终端中获取符号链接的完全解析路径?


47

我的笔记本电脑上杂乱无章地安装了python。我看着其中的可执行文件/usr/local/bin,它们都是指向的符号链接../../../Library......

周围有一些奇怪的行为。如果我ls -lhaG看到--->符号链接右侧的相对路径,则:

lrwxr-xr-x  1 root  wheel    69B Dec  7 22:29 python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.1/bin/python3

但是,我似乎无法获得任何命令行工具来解析该路径并显示python3的实际路径。我在这里和那里发现了一些有关使用pwd -Pfind实用程序的小知识。问题在于,它们似乎在OS X上无法像人们描述它们在linux上那样工作(即,输出符号链接的完整路径)。他们只是为我打印符号链接路径:

FantasticMrFox:bin robert$ pwd -P python3
/usr/local/bin
FantasticMrFox:bin robert$ find `pwd -P` -name python3
/usr/local/bin/python3

对这里发生的事情有什么想法吗?

Answers:


36

我认为,pwd -P并将readlink成为您完成这项任务的朋友。

如何获得Mac上GNU的readlink -f的行为? ”是一个方便的资源。

pwd -P 仅当您在symlink目录中时才有效:

14:07:13 jason@mac ~ $ cd bin
14:08:08 jason@mac bin $ pwd -P
/Users/jason/Applications

readlink 通过指定目标来工作(因此可以将其用于文件):

14:09:03 jason@mac ~ $ readlink bin
Applications

14:09:34 jason@mac ~ $ readlink /var
private/var

的输出readlink似乎与指定目标的项有关。

例如:的父项/var/,因此private/var相对于是正确的/。按照我上面的示例bin -> Applications,无论在哪里运行,都在我的主目录中,输出是相同的。


3
如果符号链接指向其他符号链接,则readlink不会递归。我不会称其为“完全解决”
James Roth 2013年

这似乎不适用于OP的问题,该问题涉及与之类的东西指定的符号链接../..
user124384 '17

18

这将递归解析并返回绝对路径:

$ python
>>> import os
>>> os.path.realpath("/usr/local/bin/python3")

或非交互式版本:

python -c "import os; print(os.path.realpath('/usr/local/bin/python3'))"

1
当内建函数使您失败时,请使用脚本...很好。绝对有效:$ python -c "import os; print os.path.realpath('bin')">> /Users/jason/Applications。我将〜/ bin链接到〜/ Applications,以便在Mac和* nix系统上具有统一的.bash_profile / $ PATH。
杰森·萨拉兹

1
这很棒,效果很好!我将其标记为答案,不过我也想知道是否有办法像在其他* nix系统上一样在shell中执行此操作。
罗伯特·西亚乔

1
您如何在其他* nix系统上进行操作?而且,如今,Python已几乎普遍安装在Linux系统上。
杰森·萨拉兹

@vxjasonxv我当时很困惑的东西表明,我在问题中讨论的pwdand find命令可以解析OS X以外的其他系统的完整路径。不过,我还没有对其进行测试。
Robert S Ciaccio 2011年


1

GNU coreutils-8.15在2012年添加了一个新的命令行工具realpath,该工具可以执行您想要的操作:它解析符号链接链,并将结果输出为绝对(默认)或相对路径。

苹果公司还没有包括realpath在MacOS上(可悲的是,他们似乎避开所有GPLv3的工具),但你可以自己使用自制软件轻松安装,如:brew install coreutils


-2

您可以使用readlink -f。它通过所有链接递归。假设链接指向的路径又是链接。您想要最终的绝对路径。


??你到底在说什么
罗布

read link -f python3例如,使用@DINESH SEHRA所说的正确语法,它将为您缓冲完整的符号链接。
Danijel-James W

3
显然不是OS X用户发布的,因为-fOS X版本的readlink从未发布过。
索林
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.