Wenn Sie sich nicht im selben Verzeichnis wie das Ziel befinden, müssen Sie sicherstellen, dass Sie den absoluten Pfad verwenden.
ln -s foo/bar baz/quux # fails ln -s ~/foo/bar baz/quux # succeeds
Ich möchte einen einfachen Symlink zu einer Datei erstellen.
Es funktioniert perfekt, wenn ich den Befehl innerhalb des Verzeichnisses ausführe, in dem der Symlink erstellt werden soll:
/path/to/link $ ln -s /path/to/file .
Wenn ich mich jedoch in einem anderen Verzeichnis befinde, wird jedes Mal ein fehlerhafter Link erstellt:
/any/other/path $ ln -s /path/to/file /path/to/link
Müssen ln -s
Sie sich in einem bestimmten Verzeichnis befinden oder fehlt mir etwas? Ausführen von Ubuntu 10.04.
Update: Sorry für die Verwirrung darüber, ob die Pfade relativ oder absolut waren. Sie waren relativ, und wie viele in ihren Antworten erwähnt haben, war dies die Ursache meines Problems. Vielen Dank!
Wenn Sie sich nicht im selben Verzeichnis wie das Ziel befinden, müssen Sie sicherstellen, dass Sie den absoluten Pfad verwenden.
ln -s foo/bar baz/quux # fails ln -s ~/foo/bar baz/quux # succeeds
Ich neige dazu, zu verwenden
ln -s $(pwd)/local_file /path/to/link
wenn ich eine lokale Datei verlinken muss.
Das ist für mich immer nicht verbindlich. Ich gewöhne mich daran:
ln -s $(readlink -f /path/to/file) /path/to/link
was funktionieren sollte, aber auf Kosten der Nicht-Relation in der tatsächlichen Verknüpfung auf der Festplatte.
No, there is no such requirement:
aix@aix:/tmp$ cd /tmp aix@aix:/tmp$ mkdir test_path aix@aix:/tmp$ echo test > test_path/file.txt aix@aix:/tmp$ ln -s /tmp/test_path/file.txt /tmp/test_path/link.txt aix@aix:/tmp$ cat /tmp/test_path/link.txt test
Make sure you have't mistyped any of the paths, and that you're using absolute paths everywhere (as your example indicates).
It's not really about which directory you're in, in itself. It's about what symlink you make: symlinks are just files that contain a path that points to a file. You can make symlinks that contain paths that start with the /
character, or symlinks that don't start with that character. You can create symlinks that contain ..
path components, and symlinks that don't. When programs resolve symlinks to find the target file, they interpret the path as being relative to the directory that contains the symlink. So you just need to make sure the symlink has the path that you want.
Here's one way that's similar to Matthew Flaschen's answer, but here making a relative symlink:
/tmp$ mkdir -p spam/eggs/ham /tmp$ mkdir foo /tmp$ python -c "import os, sys; print os.path.relpath(sys.argv[1], os.path.abspath(sys.argv[2])), sys.argv[2]" $(readlink -e foo) spam/eggs/ham | xargs ln -s /tmp$ ls -l spam/eggs/ham/foo lrwxrwxrwx 1 user user 12 2012-02-05 15:12 spam/eggs/ham/foo -> ../../../foo
No doubt that could be done in pure Bourne / bash shell too, but it's easy to write (and read) this correctly in python.