如何找到两条绝对路径的相对路径?

con*_*gus 6 c path relative-path absolute-path

给出两条绝对路径,例如

  • /a/path/to/a
  • /a/path/to/somewhere/else

我怎样才能获得从一个到另一个的相对路径../a

从某种意义上说,与之相反realpath.

Tho*_*key 6

我在这里回答了类似的问题:解析相对路径而不引用Windows上的当前目录.

这没有标准功能.为此,vi-like-emacs中有一个函数.快速检查apropos relative显示我很少有其他程序可能实现这个:例如revpath.

它可以作为字符串操作(不需要计算工作目录)来完成:

  • 首先找到以路径分隔符结尾的最长公共前缀.
  • 如果没有共同的前缀,那么你就完成了
  • 从当前和目标字符串的(...的副本)中删除公共前缀
  • 用".."替换当前字符串中的每个目录名
  • 在目标字符串前添加(使用路径分隔符)
  • 返回组合字符串

第二步中的" 完成 "假定您想使用相对路径来缩短结果.另一方面,您可能希望使用相对路径名,而不管长度如何.在这种情况下,只需跳过该步骤(结果将更长,但相对).


Cal*_*leb 6

找到最长的公共路径(在本例中为/a/path/to),并从两个绝对路径中删除它.这会给:

  • /a
  • /somewhere/else

现在,将起始路径中的每个路径组件替换../为目标路径,并将结果前置.如果你想从目录else到目录a,那将给你:

../../a
Run Code Online (Sandbox Code Playgroud)

如果你想走另一条路,你会改为:

../somewhere/else
Run Code Online (Sandbox Code Playgroud)