mv eine Datei, ohne einen Symlink zu dieser Datei zu unterbrechen

24

Kann mveine Datei ohne Unterbrechung einer symbolischen Verknüpfung zu dieser Datei erstellt werden? Meine erste Antwort auf diese Frage lautet "Nein". Ich arbeite an einer Lösung auf Skriptbasis, um die Links unmittelbar nach dem Umzug zu ändern. Ich habe mich jedoch gefragt, wie andere dieses Problem angegangen sind. Die Pfade und Namen der Symlinks sind im Voraus bekannt. Theoretisch muss ich also nur Folgendes tun:

  1. Holen Sie sich das Ziel des Links
  2. mv das Ziel
  3. Erstellen Sie den Link zum neuen Ziel erneut
  4. erstelle einen neuen Link zum neuen Ziel (anders als der ursprüngliche Link, den ich noch behalten möchte)

Zu einem späteren Zeitpunkt:

  1. lösche den alten link

1-4 wird in ein Bash-Skript eingeschlossen, aber ich frage mich, ob jemand einen eleganteren Ansatz hat oder von einem eingebauten Befehl weiß, den ich nicht kenne.

gabe.
quelle
2
Harte Links haben dieses Problem nicht. Sie haben jedoch andere Nachteile. :-)
Stéphane Gimenez
3
Ja, ich kann keine Hardlinks verwenden, da sich die Dateien über mehrere Dateisysteme erstrecken.
gabe.
2
Außerdem: Es kann kein Hardlink zu einem Verzeichnis erstellt werden.
Sampablokuper

Antworten:

8

Sie sind auf dem richtigen Weg, ich glaube, es gibt keinen einfacheren Weg als die von Ihnen beschriebene Reihenfolge.

Die Schritte 3 und 4 sind etwas verwirrend. Wenn Sie vorhandene Links neu ausrichten möchten, behalten Sie denselben Namen, den Sie ln -fzum Überschreiben vorhandener Dateien verwenden können. Wenn Sie möchten, dass der Name Ihrer Links auch dem neuen Zielnamen entspricht, ist Ihre Reihenfolge korrekt.

Caleb
quelle
1
Heh, ja, lies diesen Teil einfach noch einmal durch und jetzt habe ich mich auch verwirrt. Ich werde es optimieren, damit es sinnvoller ist. Vielen Dank.
gabe.
Ich bin ein bisschen verwirrt über die Verwendung von ln -f, aber ich denke, dass das gepostete Skript @fred dabei helfen kann, zu klären, wie es funktioniert. Die Manpage war überraschenderweise keine große Hilfe.
gabe.
@gabe. Die ursprüngliche Version meiner Antwort hatte das Richtige -s -f, aber während sie mofifizierte, "verlor" sie das -s: Falsch! Aus Wikipedia : 'ln' ohne Optionen erstellt einen festen Link, 'ln -f' erzwingt einen festen Link ... also danke für die Frage, es hat die Syntax für mich jetzt wirklich bestätigt Dinge ... Es erfordert ln -s -f.. (Ich habe die Anpassung vorgenommen)
Peter.O
4

Für Ihre Situation:

# change target of a symbolic link
# -------------
# ln -s, --symbolic    make symbolic links instead of hard links
# ln -f, --force       remove existing destination files
#
# Setup: make junk.link to  file junk
  echo hello > ~/junk
  ln -s ~/junk ~/junk.link;  cat ~/junk.link
#
# move file and point the link to it.
  org="$(readlink ~/junk.link)"
  new="$org".moved
  mv "$org" "$new"
  ln -s -f "$new" "$new".link  # '-s' for a soft link
Peter.O
quelle
Hinweis: Es wird komplizierter, wenn es sich um eine Gliederkette handelt.
Peter.O
0

Ich habe das nächste Problem. Ich fand ein sehr gutes Icon-Thema namens "Suru ++"

Suru ++ 20 [Offiziell fehlerfrei und 11 DEs-kompatibel]

Aber diese Ikone Thema sind in Svg alle Bild gemacht. Jetzt möchte ich es in Fluxbox verwenden und Menüeinträge generieren, aber dies ist nur mit png icon image möglich. Ich lade den Master herunter, in dem sich alle Symbole im SVG-Format befinden Ordnergröße wie 16x16, 24x24 px. Aber in diesen Ordnern befinden sich symbolische Links zu SVG-Dateien:

Erweiterungen Svg in symbolischen Links, die ich zu PNG ändern möchten

Wenn es eine Möglichkeit gibt, die Erweiterung svg in png in allen symbolix-Links zu ändern, funktioniert das Symbolthema im Fluxbox-Menü und in den Dateimanagern einwandfrei. Ich habe einen Eintrag über dieses Icon-Thema in Xubuntu gemacht, aber in Spanisch

Gott segne

Indacochea Wachín
quelle