删除目录的符号链接


1085

我有一个指向重要目录的符号链接。我想摆脱该符号链接,同时保留目录。

我试着rm回来rm: cannot remove 'foo'
我试着rmdir回来rmdir: failed to remove 'foo': Directory not empty
,然后逐步前进rm -frm -rf然后sudo rm -rf

然后我去找我的后援。

有没有一种方法可以摆脱用婴儿洗澡水扔掉婴儿的符号链接?


74
问与Linux相关的问题怎么了?我最后一次检查,堆栈溢出是不特定的操作系统
杰里米·坎特雷尔

6
这个问题不是更适合超级用户或与Linux相关的Stack Exchange吗?
mwfearnley 2015年

45
@mwfearnley可以,但是请检查日期。超级用户当时还不是。它已经被移植了,所以也在那里。不知道为什么它仍然在这里,但这是我得分最高的问题,我不会在嘴里看礼物业力。
马修·斯科腾

16
提示: rm -r link/删除目标上的内容
Gayan Weerakutti

31
Then I went to find my back-ups-这让我笑了。
frakman1

Answers:


1308
# this works:
rm foo
# versus this, which doesn't:
rm foo/

基本上,您需要告诉它删除文件,而不是删除目录。我相信之间的差异rmrmdir存在的,因为在C库将每一个的方式不同。

无论如何,第一个应该工作,而第二个应该抱怨foo是目录。

如果上述方法不起作用,请检查您的权限。您需要对包含目录的写入权限才能删除文件。


121
是的。这就说得通了。我从不输入foo,而是输入f <tab>,bash为我填充了/。
马修·史考特

6
这并不总是有效。有时,您需要运行rm -rf folderName(不带尾号/)以删除符号链接。例如,Amazon Linux在某些情况下会以这种方式运行。
brandonscript

18
@ r3mus:切勿-r与符号链接一起使用,除非您要丢失符号链接中的所有内容。-f除了覆盖文件权限外,也不需要。
马修·沙利

27
具体而言,unlinklnAKA“链接”操作无关。该名称unlink指的是从文件系统的文件表中取消链接/删除文件的过程,从而使内容与对它们的任何引用都脱离-它们是未链接的。这是一个令人困惑的名称,尤其是应用于链接和符号链接时,这完全是误导性的。unlink将与符号链接一起使用,因为它可与任何文件一起使用,而与类型无关。
马修·沙利

4
如果您真的担心过做傻事,那么alias rm="rm -i"节省的皮革比我想的要多。
马修·沙利

832

使用“ unlink”命令,并确保末尾没有 /

$ unlink mySymLink

unlink()从文件系统中删除一个名称。如果该名称是指向文件的最后一个链接,并且没有进程打开该文件,则该文件将被删除,并且它正在使用的空间可供重复使用。 如果名称是指向文件的最后一个链接,但是任何进程仍在打开文件,则该文件将一直存在,直到关闭引用该文件的最后一个文件描述符为止。

我认为如果我正确阅读它可能会出现问题。

如果名称引用了符号链接,则该链接将被删除。

如果该名称涉及套接字,fifo或设备,则将其名称删除,但是打开对象的进程可能会继续使用它。

https://linux.die.net/man/2/unlink


33
@OmarAbid“ rm foo /”版本使我感到恐惧。这似乎更安全:)
Joe Phillips

9
在Ubuntu中,我与测试~/c/a/file/c/b/ln -s ~/c/a ~/c/b/。在中~/c/b/rm a/不起作用,rm -rf a/只能清空原件aunlink a完美地工作,unlink a/什么也不做。
Brady Trainor 2014年

3
在OS X 10.10中,unlink它只是的别名rm。旨在表明rm在处理目录结构的任何部分时都应使用适当的纪律。
Doug Powers

1
在脚本编制中,rm -f无论链接是否存在,它都会以静默方式删除该链接,而unlink如果该链接不存在,则会抱怨。没有等效的-f选项可取消链接,这会使脚本更加复杂。
shonky linux用户2015年

22
unlink可以删除常规文件。它的功能少于rm符号链接,而且不特定于符号链接。rm也不删除没有-r标志的目录。因此,我建议您首选rm,它具有详细和交互的标志;以及有意义的警告和错误消息。
ThorSummoner

18

rm应该删除符号链接。

skrall@skrall-desktop:~$ mkdir bar
skrall@skrall-desktop:~$ ln -s bar foo
skrall@skrall-desktop:~$ ls -l foo
lrwxrwxrwx 1 skrall skrall 3 2008-10-16 16:22 foo -> bar
skrall@skrall-desktop:~$ rm foo
skrall@skrall-desktop:~$ ls -l foo
ls: cannot access foo: No such file or directory
skrall@skrall-desktop:~$ ls -l bar
total 0
skrall@skrall-desktop:~$ 

17

使用rm symlinkname但不要在末尾使用正斜杠(请勿使用:)rm symlinkname/。然后将询问您是否要删除符号链接,y回答是。


63
您没看错,但是正确的答案已经在这里接受(4年前!)。何必呢?
马修·斯科腾

1
Google在搜索“删除符号链接”时将其作为特色片段。也许它喜欢它的简洁性,不确定它的启发式是如何工作的。无论如何,当我回看命令行时,我迅速做了一个脸部按摩:-)
Randall

12

假设它实际上是一个符号链接,

$ rm -d symlink

它应该弄清楚了,但是由于它不能,所以我们启用了用于另一种情况的潜在代码,这种情况已经不存在了,但是恰好在这里做了正确的事情。


7

如果rm无法删除符号链接,则可能需要查看包含符号链接的目录的权限。要删除目录条目,您需要对包含目录具有写权限。


4

假设您的设置类似于:ln -s /mnt/bar ~/foo,那么您应该可以rm foo毫无问题地进行操作。如果不能,请确保您是的所有者,foo并有权写入/执行文件。除非您递归执行,否则删除foo不会碰到bar


2

在CentOS上,只需运行rm linkname,它会要求“删除符号链接?”。键入YEnter,链接将消失并且目录是安全的。


2

我在Windows Server上运行的MinGW(实际上是Git Bash)遇到了这个问题。上述建议似乎都不起作用。最后,制作了该目录的副本,以防万一,然后删除了Windows资源管理器中的软链接,然后删除了回收站中的项目。它发出了删除文件的声音,但没有删除。不过要备份!


3
“它发出了删除文件的声音……”-哇!
Sterex

LMFAO。“它发出了删除文件的声音……”
Shivam Jha,

我记得软盘!
基思·惠丁汉

以上都不对我有用:eddyq @ eddyq-Latitude-E6440:〜$ ls桌面下载Dropbox-Windows音乐公共视频w文档Dropbox examples.desktop图片模板'VmWare vmx文件'
eddyq
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.