如何在不将其解析为原始文件路径的情况下获取符号链接的完整路径?
例如,如果我的目录设置如下:
~$ tree analysis_results/
analysis_results/
`-- Sample1
`-- bar.txt -> /Users/me/foo.txt
如果我尝试获取bar.txt
的完整路径,我最终会找到foo.txt
的路径:
~$ readlink -f analysis_results/Sample1/bar.txt
/Users/me/foo.txt
但我真正想要的是:
/Users/me/analysis_results/Sample1/bar.txt
有一种简单的方法可以实现这一目标吗?看起来我没有realpath
可用,不确定该程序是否这样做,或者是否有其他命令可以这样工作。
当pwd
类似于:
/Users/me/analysis/peaks/workflow/code
但我想阅读符号链接的完整路径,如:
/Users/me/analysis/alignment/results/Sample1/bar.txt
答案 0 :(得分:4)
使用GNU realpath
:
$ touch foo
$ ln -s foo bar
$ realpath --no-symlinks bar
/path/to/bar
答案 1 :(得分:1)
echo "$(readlink -f analysis_results/Sample1)/bar.txt"
仅解析目录,然后将文件名附加到结果中。
答案 2 :(得分:1)
您希望解析任何中间符号链接的完整路径吗?
从"另一种方式来做到这一点" category:你的pwd命令可能有一个" -P"用于打印目录的物理路径的选项。因此,您可以在cd
中包含pwd
和()
以获得类似
user@host[/tmp]
$ mkdir test
user@host[/tmp]
$ ln -s test linkdir
user@host[/tmp]
$ (cd /tmp/linkdir; pwd -P)
/tmp/test
因此,您所做的只是cd $(dirname $yourfile)
,然后运行pwd -P
以获取父目录的物理路径。它在示例中包含在parens中,因此它创建了一个子shell并且不会影响当前的工作目录。
答案 3 :(得分:0)
要获取 bash 脚本文件夹的父路径,
这种 parameter substitution、内壳和实路径的组合起到了作用:
例如,“包含”../something
。内部 cd
超出范围,后面跟着反引号。
echo $(realpath --no-symlinks `cd ..; echo $(pwd)`)
source $parentDir/helper-library.sh