Ein Skript, das einen absoluten Pfad erstellt, wenn ein Verzeichnis mit einem symbolischen Link in der Mitte des Pfads angegeben wird.
followlnk.py
#!/usr/bin/env python
import os
import sys
import os.path
def follow_link(path):
path = os.path.abspath(path)
path_fragments = []
current = ""
while True:
path, child = os.path.split(path)
if child == '':
current = path # /
break
path_fragments.insert(0, child)
while path_fragments:
current = follow_child(current, path_fragments[0])
path_fragments = path_fragments[1:]
print(current)
def follow_child(current, child):
result = os.path.join(current, child)
if not os.path.islink(result):
return result
link = os.readlink(result)
if os.path.isabs(link):
return link
return os.path.abspath(os.path.join(current, link))
if __name__ == "__main__":
if len(sys.argv) > 1:
follow_link(sys.argv[1])
else:
print("%s [directory]" % sys.argv[0])
sys.exit(1)
Es ist ein verworfenes Skript, daher ist es angemessen, aber alles, was Sie tun müssen, ist, zuerst den Pfad aufzuschlüsseln und dann das Verzeichnis zu durchsuchen, während Sie prüfen, ob es sich um einen Symlink in der Reihenfolge von oben handelt. Da ich nicht nach Fehlern gesucht habe, kann ich sterben, wenn ein Verzeichnis angezeigt wird, das unterwegs nicht vorhanden ist.
$ followlink.py ./test/symdir/subdir #symdir ist eine symbolische Verbindung zu realdir am selben Ort
/Users/home/shibukawa/develop/test/realdir/subdir