我需要处理许多目录,确定它们中的哪些文件是符号链接,以及它们链接到哪些文件。这听起来很简单,但我无法控制文件名中控件或其他字符的存在,我需要一个强大的解决方案。
因此,给定一个任意名称的文件,如何在链接目的地也可以包含任意内容时如何安全地确定链接的内容?
答案 0 :(得分:45)
readlink -f <linkname>
答案 1 :(得分:1)
stat <linkname>
示例:
stat /usr/local/cuda
前2行将显示:
File: '/usr/local/cuda' -> 'cuda-8.0'
Size: 8 Blocks: 0 IO Block: 4096 symbolic link
...
答案 2 :(得分:-1)
Python 2脚本,用于跟踪/跟踪作为参数提供的符号链接。
listSymLink.py
import os.path as OSPath
import os
import sys
for arg in sys.argv[1:]:
if OSPath.exists(arg):
pathTrail = [OSPath.abspath(arg)]
while OSPath.islink(pathTrail[-1]):
linkTarget = os.readlink(pathTrail[-1])
if not OSPath.isabs(linkTarget):
linkTarget = OSPath.join(os.path.dirname(pathTrail[-1]), linkTarget)
pathTrail.append(linkTarget)
print " -> ".join(map(lambda x: "\"" + x + "\"", pathTrail))
else:
print "\"" + arg + "\" path doesn't exist"
示例
python listSymLink.py /usr/bin/c++
打印
"/usr/bin/c++" -> "/etc/alternatives/c++" -> "/usr/bin/g++" -> "/usr/bin/g++-8" -> "/usr/bin/x86_64-linux-gnu-g++-8"