Ist es möglich, Symlinks zu erstellen, die der Datei folgen?

7

Verhalten:

me@local: tree
.
|-- ba
|   `-- file.txt
|-- foo
|   `-- file.txt -> ba/file.txt
`-- foobar

Nehmen wir jetzt an, ich verschiebe die Datei file.txt von banach foobar:

me@local: mv ba/file.txt foobar/file.txt

Ich habe festgestellt, dass der Symlink im Ordner foo immer noch auf den ba/file.txtPfad verweist .

Gibt es eine Möglichkeit, Symlinks zu erstellen, die die Pfade automatisch aktualisieren, wenn die Quelldatei verschoben wird?

Oder Symlinks, die gelöscht werden, wenn ich die Quelldatei lösche?

Wird super sein.

Strae
quelle

Antworten:

11

Sie könnten harte Links erstellen.

Harte Links haben ihre eigenen Nachteile, z. B. keine Links zu Verzeichnissen, keine Links zwischen Dateisystemen. Und sie werden nicht gelöscht, wenn Sie das "Original" löschen. Tatsächlich verhindern sie, dass der Speicherplatz auf dem Laufwerk freigegeben wird, und Sie können weiterhin über den festen Link auf den Inhalt zugreifen.

Sie können im Dateibrowser (Nautilus) keine festen Links erstellen, aber es gibt einen Fehlerbericht darüber.

Mihai Capotă
quelle
2
Symlinks sind das neue Kind auf dem Block, und ich denke, andere Betriebssysteme, die nur Symlinks erlaubten, haben dazu geführt, dass die Leute nie erfahren haben, dass lnes ohne funktioniert -s;)
msw
msw ist richtig, aus irgendeinem Grund, der mich eine Weile nicht -smit lnAngst benutzt hat, hätte ich nie gedacht, dass es angemessen ist, dies zu tun. In Wirklichkeit ist dies kein Problem, es sei denn, Sie haben verrückte Partitionierungsschemata und verschieben Dateien viel darüber.
TJ L
Ich glaube nicht, dass Hardlinks eines der Dinge tun, die Sie gefragt haben? Sie "aktualisieren die Pfade nicht automatisch, wenn die Quelldatei verschoben wird", und sie werden nicht "gelöscht, wenn ich die Quelldatei lösche".
Ben Williams
@ Ben: Ja, sie tun, was ich brauche, wenn ich eine Datei verschiebe, folgen Sie ihr
Strae
Persönlich halte ich Hardlinks im allgemeinen Fall für eine schlechte Idee. Ich habe viele Fallstricke bei der Verwendung von Hardlinks gefunden und finde jeden Tag mehr. Siehe superuser.com/questions/402295/…
MountainX
1

Soweit mir bekannt ist, gibt es mit den normalen Linux-Dateisystemen keine Möglichkeit, dies zu tun.

Symlinks sind wirklich nur ein dummer Text, der sagt "Schau, ich heiße wirklich Foo" - es gibt keine Überprüfung, ob Foo existiert, wie du herausgefunden hast. Sie können Symlinks erstellen, die auf nichts verweisen, genauso einfach wie Symlinks, die auf etwas Nützliches verweisen.

Vielleicht kann jemand mit mehr Kenntnissen über andere Dateisysteme als ext2 / 3/4 (wie z. B. jfs? Oder zfs? Oder zfs?) Sagen, ob dies unter fortgeschritteneren Dateisystemen als ext2 / 3/4 möglich ist. Vielleicht unterstützt NTFS dies sogar? NTFS hat keine Symlinks als solche, aber es gibt noch eine andere, etwas ähnliche Sache (deren Name mir gerade entgeht).

Ben Williams
quelle
"Kreuzung"? [] ( google.com )
Bis auf weiteres angehalten.
1

Ja, du kannst.

In die Shell müssen Sie Folgendes eingeben:

ln ba/file.txt foo/file.txt

Dies ist ein starker Link, und wenn Sie die Datei in ba / file.txt sogar löschen, bleibt sie in foo / file.txt (Sie können sehen, wie viele Links es mit dem ls -lBefehl gibt

Wenn Sie das tun möchten, was Sie getan haben (einen symbolischen Link erstellen), müssen Sie Folgendes eingeben:

ln -s ba/file.txt foo/file.txt
greuze
quelle