进入由链接链接的目录

进入由链接链接的目录

当我cd链接时,我的当前路径以链接的路径为前缀,而不是链接链接到的目录的路径。例如

~/dirlinks/maths$ ls -l logic
lrwxrwxrwx 1 tim tim 71 Jul 27 10:24 logic -> /windows-d/academic discipline/study objects/areas/formal systems/logic

~/dirlinks/maths$ cd logic
~/dirlinks/maths/logic$ pwd
/home/tim/dirlinks/maths/logic

~/dirlinks/maths/logic$ cd ..
~/dirlinks/maths$

我想将当前路径更改为链接目录的路径,以便我也可以使用链接目录的父目录。除了通过ls链接找出链接的目录,然后cd进入其中之外,还有哪些更简单的方法可以实现这一点?例如,cd进入链接后,如何将当前路径更改为链接目录的路径?

答案1

使用 POSIX shell,您可以使用-P以下选项光盘内置:

cd -P <link>

bash, 从man bash:

-P 选项表示使用物理目录结构而不是遵循符号链接(另请参阅 set 内置命令的 -P 选项)

答案2

类似 Korn 的 shell 跟踪当前目录路径中的符号链接(这称为逻辑当前目录跟踪)。如果要展开所有符号链接,请将选项传递-Pcd内置函数(用于物理当前目录跟踪):

cd -P logic

如果您位于通过符号链接访问的目录中,并且想要将跟踪的当前目录切换到符号链接展开的路径,请运行

cd -P .

如果要打印当前目录的路径并展开符号链接,请运行pwd -P.在 bash 中,如果您想关闭逻辑跟踪,请运行set -P;在 zsh 中,运行set -wsetopt chase_links.

答案3

您可以使用它readlink来确定链接指向的位置,并提供此输出作为cd.

cd "$(readlink <link>)"

在附加符号链接指向符号链接的情况下,readlink将仅提供目标,除非您指定其选项之一来跟随符号链接到规范文件目标,例如readlink -f <link>.

阅读链接- 打印符号链接或规范文件名的值

-f, --canonicalize
通过递归地跟踪给定名称的每个组件中的每个符号链接来规范化;除最后一个组件外的所有组件都必须存在

-e, --canonicalize-existing
通过递归地跟踪给定名称的每个组件中的每个符号链接来规范化,所有组件都必须存在

-m, --canonicalize-missing
通过递归地跟踪给定名称的每个组件中的每个符号链接来规范化,而不要求组件存在

相关内容