在给定当前目录的相对路径的情况下,我需要为文件计算某个文件的完整路径。
realpath
或cygpath
(我在Cygwin,但这应该适用于所有* nix)不起作用,因为我在路径中有一个符号链接。
是否有一种简单的方法可以在bash / sh中使用路径字符串进行“算术”?
本质上我想做
/home/me/dir + ../../you/folder = /home/you/folder
编辑:我的问题不好,要求一件事,然后在一个解决方案中解决问题。
我有
/那里
/有/ A
/有/一个/文件
/ here / b - >符号链接到../ there / a
在CWD = /这里,我想要问题的答案“什么是'b / file'的规范路径?”是“/ there / a / file”。
答案 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;)