给出两条绝对路径,例如
/a/path/to/a
/a/path/to/somewhere/else
我怎样才能获得从一个到另一个的相对路径../a
?
从某种意义上说,与之相反realpath
.
我在这里回答了类似的问题:解析相对路径而不引用Windows上的当前目录.
这没有标准功能.为此,vi-like-emacs中有一个函数.快速检查apropos relative
显示我很少有其他程序可能实现这个:例如revpath.
它可以作为字符串操作(不需要计算工作目录)来完成:
首先找到以路径分隔符结尾的最长公共前缀.
如果没有共同的前缀,那么你就完成了
从当前和目标字符串的(...的副本)中删除公共前缀
用".."替换当前字符串中的每个目录名
在目标字符串前添加(使用路径分隔符)
返回组合字符串
第二步中的" 完成 "假定您想使用相对路径来缩短结果.另一方面,您可能希望使用相对路径名,而不管长度如何.在这种情况下,只需跳过该步骤(结果将更长,但相对).
找到最长的公共路径(在本例中为/a/path/to
),并从两个绝对路径中删除它.这会给:
/a
/somewhere/else
现在,将起始路径中的每个路径组件替换../
为目标路径,并将结果前置.如果你想从目录else
到目录a
,那将给你:
../../a
如果你想走另一条路,你会改为:
../somewhere/else