只查找符号链接的目标

只查找符号链接的目标

为了在 shell 脚本中使用,我正在寻找一种命令行方式来获取符号链接的目的地。到目前为止我最接近的是stat -N src,它输出src -> dst.当然,我可以解析输出并 get dst,但我想知道是否有一些直接的方法来获取目的地。

答案1

另一种选择是使用专门设计的命令(readlink如果可用)。

例如

$ readlink -f `command -v php`
/usr/bin/php7.1

答案2

在 Mac OS X 和 FreeBSD/NetBSD/等上。它是:

stat -f %Y <filename>

更一般地说,我猜解决方案是(stat --printf=%N 使用奇怪的引号):

ls -l b | sed -e 's/.* -> //'

例子:

# ln -s a b
# stat -f %Y b
a

另一种方法是:

# find b -maxdepth 0 -printf %l
a#

最后一行被破坏了,因为它没有换行符,但如果您需要变量中的结果,那就没问题了,就像这样

# f=$(find b -maxdepth 0 -printf %l)
# echo $f
a

如果碰巧是目录,则需要-maxdepth防止find下降到目录。b

答案3

find这可以使用 GNU :来完成find src -prune -printf "%l\n"

答案4

在没有readlinkstat命令但有 Python 2.x 的系统上,我使用一个简短的脚本:

#!/usr/bin/env python

import os, sys

if __name__ == "__main__":
    src = sys.argv[1]
    target = os.readlink(src)
    if not os.path.isabs(target):
            target = os.path.abspath(os.path.join(os.path.dirname(src), target))
    print target

请注意,与readlink -f此不同的是,可能仅遵循一层符号链接。

相关内容