【问题标题】:How to create relative path from absolute path in bash? [duplicate]如何从bash中的绝对路径创建相对路径? [复制]
【发布时间】:2019-04-10 23:24:36
【问题描述】:

我在这个目录中:

/home/michal/project/test/my-utils/rel/0.1.0

我想在 Linux shell 中获取 /home/michal/project/ 的相对路径:

../../..

我用 sed 尝试了一些东西,但我没有成功创建正则表达式。例如。尝试之一:

pwd | sed -e "s/.*project\///g" | sed -e "s/[^\/]+/../g"

有什么技巧吗?

【问题讨论】:

  • 也许只是sed 's,^/[^/]*/[^/]*/[^/]*,../../..,'
  • @WiktorStribiżew 它不能以预期的方式工作:$ pwd | sed 's,^/[^/]*/[^/]*/[^/]*,../../..,' ../../../project/test/my-utils /rel/0.1.0 我想有一个到 /home/michal/project/ 目录的相对路径。不知道我有多少子目录的东西。
  • 所以它更像是“确定我需要爬回我的目录树多远,直到我到达所需的文件夹,这个数字是我需要连接多少 ../ 以获得我的答案”
  • 这看起来有点像XY问题;仅使用绝对路径/home/michal/project 有什么问题?您可以通过${path%%/test/*} 获得。 (我假设您知道 test 是“根”子目录。)
  • 试试awk -F/ '{f=0;for(i=2; i<=NF; i++) {if($i!="project" && f==0) {printf "../"} else {if (f==0) {printf "../";f=1} else {printf $i "/"}}}}' <<< "${PWD}"

标签: regex bash sed relative-path pwd


【解决方案1】:

你可以使用命令realpath:

realpath --relative-to=${PWD} /home/michal/project/

来自帮助页面:

--relative-to=FILE 打印相对于 FILE 的解析路径

【讨论】:

  • +1 学到的新命令可以在man readlink "see also" 中找到,但应该知道我们可以用它做相对路径
  • 就是这样,没有正则表达式!谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2022-06-19
  • 2010-09-21
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多