Wie kann die Erstellung einer symbolischen Verbindung erzwungen werden?

10

Ich habe ein bestimmtes Verzeichnis voller anderer Verzeichnisse, die nach Datum sortiert (benannt) sind. Zur Vereinfachung der Bezugnahme habe ich einen Symlink, currentder auf den neuesten verweist.

In dem Skript, das neue Datumsverzeichnisse erstellt, möchte ich den currentSymlink erstellen oder korrigieren, um auf das neueste Verzeichnis zu verweisen, das einmal erstellt wurde.

Ich dachte, der entsprechende Befehl wäre nur z.

ln -fs 2017-03-01 current

Wenn der currentSymlink noch nicht vorhanden ist, funktioniert dies.


Wenn der currentSymlink jedoch bereits erstellt wurde (und beispielsweise auf das Verzeichnis verweist 2017-02-28), funktioniert dies nicht:

Anstatt die Symlink entfernen currentund einen neuen Symlink zu schaffen , currentwelche Punkte zu 2017-03-01, wird stattdessen das Ergebnis ein gebrochenes Symlink genannt 2017-03-01 zu zeigen selbst ruht innerhalb des Verzeichnisses 2017-02-28(das ist , wo der Symlink currentspitz und noch Punkte).

Das hat mich verblüfft, also habe ich die Spezifikationen für gelesenln . Es stellt sich heraus, dass dies erwartetes Verhalten ist:

ZUSAMMENFASSUNG

ln [-fs] [-L|-P] source_file target_file

ln [-fs] [-L|-P] source_file... target_dir

BESCHREIBUNG

...

Das zweite Synopsenformular wird angenommen, wenn der endgültige Operand ein vorhandenes Verzeichnis benennt.


Es scheint also, dass es keine Möglichkeit gibt , auch immer auf einen Symlink repoint , dass derzeit auf ein Verzeichnis auf ein neues Ziel, wo das neue Ziel einen Namen hat verschiedene vom Namen des Symlink. Funktioniert ln -fsalso nicht so, wie ich es mir vorgestellt habe.

Muss ich rm current, oder gibt es einen anderen Ansatz, den ich übersehen habe?

Platzhalter
quelle

Antworten: