33

我想转换

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

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

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

4

5 回答 5

34

readlink -f /home/stevin/data/APP_SERVICE/../datafile.txt假设你的 Unix/Linux 有readlink.

于 2012-06-28T13:59:40.150 回答
21

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

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

对于文件,

filepath=../dir1/dir2/file3
echo $(cd $(dirname $filepath); pwd)/$(basename $filepath)
于 2012-06-28T14:00:46.163 回答
20

我很惊讶还没有人提到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
于 2014-04-09T14:21:25.990 回答
2

基于Thrustmaster 的回答,但使用纯 bash:

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

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

于 2013-11-25T16:26:09.687 回答
0

这是我的辅助功能

# get a real path from a relative path.
function realPath() {
  if [[ -d "$1" ]]; then
    currentPath="$(pwd)" # save current path
    cd "$1" || exit 1 # cd to the checking dir
    pwd
    cd "$currentPath" || exit 1 # restore to original path
  else
    echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")"
  fi
}
于 2022-02-26T06:22:03.090 回答