【问题标题】:How to convert relative path to absolute path in Unix如何在 Unix 中将相对路径转换为绝对路径
【发布时间】:2012-06-30 01:32:52
【问题描述】:

我要转换

相对路径 - /home/stevin/data/APP_SERVICE/../datafile.txt

绝对路径 - /home/stevin/data/datafile.txt

在 Unix 中是否有内置工具可以执行此操作,或者关于如何实现此操作的任何好主意。

-史蒂夫

【问题讨论】:

  • 也许您可以更新您的问题以说明您认为为什么需要这样做。这是一个特点!祝你好运。
  • 我将相对路径标记到一个小文件中,然后使用此条目将文件复制到不同的位置。但是,APP_SERVICE 文件夹有时可能不存在,导致使用此相对路径复制失败。

标签: unix


【解决方案1】:

readlink -f /home/stevin/data/APP_SERVICE/../datafile.txt 应该可以满足您的需求,假设您的 Unix/Linux 具有 readlink

【讨论】:

    【解决方案2】:

    这样的东西可以帮助目录:(对于文件,附加basename

    echo $(cd ../dir1/dir2/; pwd)
    

    对于文件,

    filepath=../dir1/dir2/file3
    echo $(cd $(dirname $filepath); pwd)/$(basename $filepath)
    

    【讨论】:

    • +1 实际上 echo "$(cd $(dirname $thingie); pwd)/$(basename $thingie)" 对文件 目录都有效,因为 dirnamebasename 只处理字符串,并不关心它们的字符串是否work on 是一个实际的 FS 对象
    • @TobiasKienzler 哦,是的,这实际上是一个错字,我直到现在才看到同时拥有../dir1/dir2/file3$t。我会解决的。 :)
    • 由于 OP 提到甚至没有 readlinkhere 的解决方案甚至不需要 dirnamebasename...
    • @TobiasKienzler thingie=/;echo "$(cd $(dirname $thingie); pwd)/$(basename $thingie)" 输出 ///。不好
    • @beluchin 您可能希望将该评论放在链接答案下方而不是这个评论 - 并且实际上允许使用额外的斜杠并且大多忽略,AFAIK
    【解决方案3】:

    我很惊讶还没有人提到realpath。将您的路径传递给realpath,它将规范化它们。

    $ ls
    Changes
    dist.ini
    
    $ ls | xargs realpath
    /home/steven/repos/perl-Alt-Module-Path-SHARYANTO/Changes
    /home/steven/repos/perl-Alt-Module-Path-SHARYANTO/dist.ini
    

    【讨论】:

    • 您的系统上是否默认安装了realpath
    • 不清楚“Unix 中的内置工具”是什么意思(OP 可能意味着内部 shell 命令)。甚至“默认安装”也是模糊的,因为操作系统安装程序通常允许用户选择要安装的组件。至于realpath,它随 Debian/Ubuntu 一起提供,只需 apt-get/aptitude 即可。但无论如何,OP 也会询问“任何好的想法”。
    • 在我的系统上,我需要添加-f 选项。
    • 不错!此外,readlink 的手册页说“注意 realpath(1) 是用于规范化功能的首选命令。”
    【解决方案4】:

    基于Thrustmaster's answer,但使用纯 bash:

    THING="/home/stevin/data/APP_SERVICE/../datafile.txt"
    echo "$(cd ${THING%/*}; pwd)/${THING##*/}"
    

    当然,cd 需要实际存在的路径,但情况可能并非总是如此 - 在这种情况下,您可能会通过编写一个小的 Python 脚本来过上更简单的生活...

    【讨论】:

      猜你喜欢
      • 2017-08-01
      • 2011-11-07
      • 2011-05-02
      • 2015-01-24
      相关资源
      最近更新 更多