如何删除符号链接的目标而不删除链接本身?


10

我有一个符号链接~/Desktop/test.txt指向~/rendu/test.txt

我只知道的路径~/Desktop/test.txt,我想要一种快速删除~/rendu/test.txt而不删除符号链接的方法。

对于那些想知道为什么的人:crypted.xxx我的桌面上有一个命名文件,该文件已加密并包含密码。

当我想更新我的加密文件时,我将其解密并crypted.txt在一个特殊目录中创建。因此,出于实际原因,我在桌面上创建了该文件的链接。但是看完我的之后crypted.txt,我想快速删除它crypted.txt(但不要删除桌面中的链接)。


4
等待,您想要删除文件(如您的问题所建议)或删除文件的内容(如标题所述)
Jacob Vlijm

删除文件并保留符号链接,以免引起误解
Ugo Hed

2
也许您可以考虑改用专用的密码管理器?例如,Keepass相当不错,并且位于存储库中。
evilsoup

Answers:


11

使用find查找符号链接,然后用readlink获得的完整路径目标rm

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

或者您已经知道链接名称:

rm "$(readlink -f ~/Desktop/test.txt)"

4
但是请注意相对链接。相对符号链接被解释为相对于它所在的目录。但是您的rm命令会将其解释为相对于Shell当前目录。因此,该命令可能会删除符号链接所指向的文件。
kasperd '16

5
@kasperd With -f -e-m完整路径将被返回,即使目标符号链接指向相对路径,所以是的,rm "$(readlink ~/Desktop/test.txt)"在使用-f -e或时,这是一个问题-m
kos 2016年

@kos你是对的。在这种情况下,您只需要担心是否可能存在任何比赛条件。
kasperd '16

或者,可以使用realpath,在这种情况下,realpath的作用与readlink -f(但如果目标本身不是链接)也可以起作用。
左右约

6

只需使用:

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

清除的文件,或

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

删除该文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.