ger*_*rit 57 command-line symlink
为了在 shell 脚本中使用,我正在寻找一种命令行方式来获取符号链接的目的地。到目前为止stat -N src,我最接近的是,它输出src -> dst. 当然我可以解析输出并获取dst,但我想知道是否有一些直接的方法可以获取目的地。
nik*_*tiu 69
另一种选择是使用专门设计的命令(readlink如果可用)。
例如
$ readlink -f `command -v php`
/usr/bin/php7.1
Run Code Online (Sandbox Code Playgroud)
Cor*_*oos 18
在 Mac OS X 和 FreeBSD/NetBSD/等上。它的:
stat -f %Y <filename>
Run Code Online (Sandbox Code Playgroud)
更一般地说,我猜解决方案是(stat --printf=%N 使用奇怪的引号):
ls -l b | sed -e 's/.* -> //'
Run Code Online (Sandbox Code Playgroud)
例子:
# ln -s a b
# stat -f %Y b
a
Run Code Online (Sandbox Code Playgroud)
另一种方法是:
# find b -maxdepth 0 -printf %l
a#
Run Code Online (Sandbox Code Playgroud)
最后一行被破坏了,因为它没有换行符,但是如果你需要一个变量的结果,那很好,就像这样
# f=$(find b -maxdepth 0 -printf %l)
# echo $f
a
Run Code Online (Sandbox Code Playgroud)
如果碰巧是目录,-maxdepth则需要防止find下降到b目录中。