Symlink zum aktuellen Ordner als absoluter Pfad, ohne den gesamten Pfad einzugeben

10502
Gareth

Symlinks sind gespeicherte Verknüpfungen für relative Pfade:

~/foo➤ ln -s . ~/bar/foo ~/foo➤ ls -l ~/bar total 8 lrwxr-xr-x 1 me me 1B 15 May 14:38 foo -> . 

Die Datei ~/bar/fooist ein Symlink zum baraktuellen Verzeichnis, dh sich selbst

Was ist, wenn ich in einem anderen Verzeichnis einen Symlink zu dem Verzeichnis erstellen möchte, in dem ich mich gerade befinde? Also im obigen Beispiel bin ich dabei ~/foound möchte ~/bar/fooals Symlink dazu erstellen ~/foo. Mein aktuelles Verzeichnis kann natürlich etwas länger als 5 Zeichen sein und ist möglicherweise nicht so einfach einzugeben.

10

2 Antworten auf die Frage

13
Huygens

Ich würde Typ sagen

ln -s $PWD ~/bar/ 

oder

ln -s `pwd` ~/bar/ 

Sie könnten auch verwenden

ln -s $PWD ~/bar/ 

Aber ich denke, das wussten Sie, und das ist es nicht, wonach Sie suchen. Könnten Sie bitte Ihre Frage aktualisieren, um zu erklären, was Ihr Ziel ist?

Wenn der Pfad Leerzeichen enthält, ist es ratsam, Folgendes zu verwenden:

ln -s "$PWD" ~/bar/ 
Zitieren Sie Ihre `$` -Variablen und Ersetzungsbefehle doppelt. Andernfalls führen Dateinamen mit Leerzeichen zu einem Lauf. Sie brauchen auch nicht die Endung $ (Basisname $ PWD) (und Sie haben ein $ vergessen (und das Zitat :-))), da dies ohnehin der Standard-Linkname ist. Daniel Andersson vor 12 Jahren 2
Ich glaube ich war dumm. Ich dachte, ich habe den Ansatz "pwd" ausprobiert und etwas lief schief. Lassen Sie uns das auf einen ID-ten-T-Fehler zurückführen Gareth vor 12 Jahren 0
@DanielAndersson Sie haben Recht, dass es keine Leerzeichen im Pfad unterstützt. Guter Punkt. also für das Protokoll werde ich die Antwort aktualisieren :) Huygens vor 12 Jahren 0
3
Daniel Andersson

Absolut:

ln -s "$(readlink -f .)" ~/bar 

(Vielleicht gut für die Allgemeinheit in Skripten) oder einfach

ln -s ~/foo ~/bar 

Verhältnismäßig:

ln -s ../foo ~/bar 

Das Ausfüllen von Registerkarten hilft Ihnen bei der Eingabe.


Aus dem Kommentar von grawity und http://lists.gnu.org/archive/html/coreutils-announce/2012-03/msg00000.html :

* Bemerkenswerte Änderungen in Release 8.16 (2012-03-26) [stabil]

...

lnakzeptiert jetzt die --relativeOption, eine relative symbolische Verknüpfung zu einem Ziel zu generieren, unabhängig davon, wie das Ziel festgelegt ist.

Also mit dieser Version:

ln -s --relative . ~/bar 

sollte funktionieren (mit in der Praxis ist dein erstes Beispiel mit dem Hinzufügen des --relativeSchalters identisch ).

Neueste * coreutils * können automatisch relative Symlinks mit `ln -s -r foo ~ / bar` erstellen. grawity vor 12 Jahren 4
@Grawity: Interessant. Offenbar noch nicht auf meinem System (Debian Sid). Daniel Andersson vor 12 Jahren 0
Laut git scheint es am 22. März für Version 8.16 hinzugefügt worden zu sein. grawity vor 12 Jahren 0
Was ist auch der Vorteil von $ (readlink -f.) `Gegenüber $ PWD? grawity vor 12 Jahren 1
@Grawity: Nicht viel. Sie funktionieren anders, wenn das aktuelle Arbeitsverzeichnis über einen Link erreicht wurde. `readlink -f` wird dann mit dem absoluten Zielpfad des aktuellen Verzeichnisses symbolisch verbunden, während $ PWD mit dem aktuellen Verzeichnis, in dem sich ein Verzeichnis befindet, symbolisch verknüpft wird. Was gewünscht wird, ist wahrscheinlich von Zeit zu Zeit verschieden und in erster Linie wahrscheinlich überhaupt kein Problem. Daniel Andersson vor 12 Jahren 2