Wie lösche ich das Ziel eines symbolischen Links, ohne den Link selbst zu löschen?

10

Ich habe einen symbolischen Link, ~/Desktop/test.txtder darauf verweist ~/rendu/test.txt.

Ich kenne NUR den Pfad von ~/Desktop/test.txt, ich möchte einen schnellen Weg zum Löschen, ~/rendu/test.txtOHNE den symbolischen Link zu löschen .

Für diejenigen, die wissen wollen warum: Ich habe eine Datei mit dem Namen crypted.xxxauf meinem Desktop, die verschlüsselt ist und mein Passwort enthält.

Wenn ich meine verschlüsselte Datei aktualisieren möchte, entschlüssele ich sie und erstelle sie crypted.txtin einem speziellen Verzeichnis. Aus praktischen Gründen stelle ich einen Link zu dieser Datei auf meinem Desktop her. Aber nachdem crypted.txtich mir meine angesehen habe , möchte ich diese schnell löschen crypted.txt(aber nicht den Link auf dem Desktop).

Ugo Hed
quelle
4
Warten Sie, Sie möchten die Datei löschen (wie Ihre Frage vorschlägt) oder den Inhalt der Datei löschen (wie der Titel
sagt
Löschen Sie die Datei und behalten Sie den symbolischen Link, entschuldigen Sie das Missverständnis
Ugo Hed
2
Vielleicht könnten Sie stattdessen einen dedizierten Passwort-Manager verwenden? Keepass ist zum Beispiel ziemlich gut und befindet sich in den Repos.
Evilsoup

Antworten:

11

Verwenden Sie find, um den Symlink zu finden, und verwenden Sie dann readlink, um den vollständigen Pfad zum Ziel zu erhalten, um rm:

find ~/Desktop/ -type l -name 'test.txt' -exec bash -c 'rm "$(readlink -f "$1")"' _ {} \;

Oder wie Sie den Linknamen bereits kennen:

rm "$(readlink -f ~/Desktop/test.txt)"
heemayl
quelle
4
Seien Sie jedoch vorsichtig mit relativen Links. Ein relativer symbolischer Link wird als relativ zu dem Verzeichnis interpretiert, in dem er sich befindet. Ihr rmBefehl interpretiert ihn jedoch als relativ zum aktuellen Verzeichnis der Shell. Daher besteht für diesen Befehl die Möglichkeit, eine andere Datei zu löschen, auf die der symbolische Link verweist.
Kasperd
5
@kasperd With -f -eoder -mder vollständige Pfad wird zurückgegeben, auch wenn der Zielsymlink auf einen relativen Pfad verweist. Ja, das ist ein Problem rm "$(readlink ~/Desktop/test.txt)", aber nicht, wenn -f -eoder verwendet wird -m.
Kos
@kos Du hast recht. In diesem Fall müssen Sie sich nur Sorgen machen, wenn es irgendwelche Rennbedingungen geben könnte.
Kasperd
Alternativ kann man realpath verwenden , was in diesem Fall dasselbe tut wie readlink -f(funktioniert aber auch, wenn das Ziel selbst kein Link ist).
links um den
6

Verwenden Sie einfach:

printf "" > "$(readlink '/path/to/link')"

um die Datei zu löschen , oder

rm "$(readlink '/path/to/link')"

um die Datei zu entfernen .

Jacob Vlijm
quelle