计算PWD中的完整路径和shell中的相对路径(替换链接)

时间:2016-05-03 20:03:57

标签: shell path

在给定当前目录的相对路径的情况下,我需要为文件计算某个文件的完整路径。

realpathcygpath(我在Cygwin,但这应该适用于所有* nix)不起作用,因为我在路径中有一个符号链接。

是否有一种简单的方法可以在bash / sh中使用路径字符串进行“算术”?

本质上我想做

/home/me/dir + ../../you/folder = /home/you/folder
编辑:我的问题不好,要求一件事,然后在一个解决方案中解决问题。

我有     /那里     /有/ A     /有/一个/文件     / here / b - >符号链接到../ there / a

在CWD = /这里,我想要问题的答案“什么是'b / file'的规范路径?”是“/ there / a / file”。

2 个答案:

答案 0 :(得分:0)

HERE=`pwd`
THERE=../../there/dir
while echo $THERE | grep '^\.\./' > /dev/null ; do 
  THERE=`echo $THERE | sed -e 's_^\.\./__'`
  HERE=`echo $HERE | sed -e 's_/[^/]\+$__'`
done
THERE=$HERE/$THERE
echo $THERE

正则表达式的翻译:在行^的开头,匹配两个文字点后跟一个斜杠\.\./

匹配斜杠/后跟一个或多个\+字符,这些字符不是斜杠[^/],后跟行尾$

答案 1 :(得分:0)

没有任何“算术计算”的简单而有效的方法是让系统告诉你所需的路径。如果你的shell是Bash:

TGTFNAME="../../you/folder"
TGTPATH=$(cd "`dirname $TGTFNAME`" 2>/dev/null; pwd; cd - >/dev/null 2>&1;)