假设我有一个链接指向另一个链接,而这个链接又指向另一个链接,以此类推。我不知道有多少层链接。有什么巧妙的命令行方法可以查看所有这些链接的最终目标?
答案1
某些版本支持跟踪链到末尾的选项。我的 Debian 机器上的版本readlink
支持该-f
选项。我的 Mac OS 机器上的版本不支持(但是,它被 fink 提供的版本所覆盖,该版本支持该选项)。
答案2
也许这不是最好的解决方案,这取决于您的需求。您可以使用以下命令检索链末尾的 inode:
stat -Lc '%i' the-link
并且如果您也需要这些文件的路径(如果链的两端彼此硬链接,则需要多个文件):
find /search/path/ `stat -Lc '%i' the-link`
好吧,有一个更聪明的解决方案:
readlink -f the-file
答案3
答案4
如果您想要一个跨平台的解决方案,您可以使用:
#!/usr/bin/env bash
s=/path/to/file
while [ -h $s ]; do s="$(readlink "$s")"; done
echo $s
看似不太雅致,但正如 dmckee 所述,Mac OS X 没有该-f
选项readlink
。