Remove a symlink to a directory
我有一个重要目录的符号链接。我想去掉这个符号链接,同时把目录放在后面。
我试了一下rm,把rm: cannot remove 'foo'拿回来。我试了一下rmdir,又把rmdir: failed to remove 'foo': Directory not empty弄回来了。然后我又通过了rm -f、rm -rf和sudo rm -rf。
然后我去找我的备份。
有没有一种方法可以摆脱这个符号链接,把婴儿和洗澡水一起扔掉?
- 问Linux相关的问题有什么问题?上次检查时,堆栈溢出不是特定于操作系统的
- 这个问题是否更适合超级用户,或者与Linux相关的堆栈交换?
- @我想是的,但请核对日期。当时超级用户还不是什么东西。它被移植了,所以也在那里。不知道为什么它还在这里,但这是我得分最高的问题,我不会把礼物业力放在嘴里。
- 提示:rm -r link/删除目标上的内容
- 埃多克斯一〔一〕那使我咯咯地笑。
- 在经历了与寻找备份完全相同的困难之后,我来到这里为将来找到了解决方案。你最后对问题的措词让我笑了——把孩子和洗澡水一起扔了。
- 埃多克斯一〔1〕也抓住了我。呸!
1 2 3 4
| # this works
rm foo
# versus
rm foo/ |
基本上,你需要告诉它删除一个文件,而不是删除一个目录。我相信rm和rmdir之间的区别是存在的,因为C库对待每一个的方式不同。
无论如何,第一个应该工作,而第二个应该抱怨foo是一个目录。
如果它不能像上面那样工作,请检查您的权限。您需要对包含目录的写入权限才能删除文件。
- 啊,是的。这是有道理的。我从来没有输入foo,我输入f和bash为我填写a/。
- 这并不总是奏效。有时需要运行EDOCX1(不带尾随/)以删除符号链接。例如,在某些情况下,AmazonLinux的行为就是这样的。
- @r3mus:除非你想失去里面的一切,否则不要使用带有符号链接的-r。也不应该需要-f,除非可能需要覆盖文件权限。
- 如果您不使用斜杠/,我会遇到一些奇怪的情况,需要这样做。诚然,最好在尝试之前备份内容,以防万一;)
- 取消链接命令更好。unlink theSymLink
- @fxfilmxf unlink可能在rm所在的某些平台上不可用。
- @fxfilmxf(或其他人)为什么你会说取消链接"更好"?
- 更新:下面关于"取消链接"的回答中的评论很好地解释了取消链接与rm的优缺点(stackoverflow.com/a/210130/339803)
- @Redfox05我还是不知道怎么好。它也不处理unlink foo/(这将使它更好地处理一个常见的意外错误),而且正如其他人所指出的,rm foo/将大幅度失败,除非您有意添加-r标志,这样做…坏事。但只是因为你告诉我了。事实上,没有递归版本的unlink(通常见osx版本的unlink的注释)并不能使它变得更好,反而使imo变得更糟。
- 具体来说,unlink与ln即"链接"操作没有关系。名称unlink是指从文件系统的文件表中取消链接/删除文件的过程,以便将内容从对它们的任何引用中分离出来-它们是未链接的。这是一个令人困惑的名字,尤其是当应用到链接和符号链接时,它完全误导了人们。unlink将与symlinks一起工作,因为它可以与任何文件一起工作,而不考虑类型。
- 如果你真的担心做些傻事,我想江户十一〔34〕省下的藏品比其他任何东西都多。
使用"unlink"命令,确保结尾没有/
unlink() deletes a name from the file system. If that name was the last link to a file and no processes have the file open the file is deleted and the space it was using is made available for reuse.
If the name was the last link to a file but any processes still have the file open the file will remain in existence until the last file descriptor referring to it is closed.
我认为如果我读得正确,这可能会有问题。
If the name referred to a symbolic link the link is removed.
If the name referred to a socket, fifo or device the name for it is removed but processes which have the object open may continue to use it.
https://linux.die.net/man/2/unlink
- @Omarabid"rm foo/"版本让我害怕。这个看起来安全多了。)
- 这完全应该标记为答案。
- 我认为取消链接对于删除符号链接并保持文件完整更好。我读过linux使用unlink来连接rm——但我不认为mac os x会这样做。如果你在一台Mac电脑上建立了一个符号链接,那么这个链接和文件就会消失。如果取消链接符号链接,链接将不存在,但原始文件仍存在。
- 在Ubuntu,我用~/c/a/file、/c/b/和ln -s ~/c/a ~/c/b/进行了测试。在~/c/b/中,rm a/不起作用,rm -rf a/只清空原来的a。unlink a工作得很好,unlink a/什么也不做。
- 在OS X 10.10中,unlink只是rm的别名。说明在处理目录结构的任何部分时,应该使用适当的rm规则。
- 在编写脚本时,无论链接是否存在,rm -f都会悄悄地删除链接,而如果链接不存在,unlink会抱怨。没有与unlink等效的"-f"选项,这使得脚本更加复杂。
- unlink可以删除常规文件。它比rm的特性要差,而且不特定于符号链接。rm也不会删除没有-r标志的目录。因此,我建议首选rm,它有详细和交互式的标志,以及有意义的警告和错误消息。
- @有或没有斜杠?
- @实际上,乔菲利普斯,我不记得我第一次尝试的时候是哪一个案例。也许我两者都用过,但都没用。太奇怪了,我又试了一次,它开始工作了。
- @蒂姆,那不正确。rm在macosx fine中工作,用于删除符号链接,而不删除文件。
- 比rm安全得多!
RM应该删除符号链接。
1 2 3 4 5 6 7 8 9 10
| 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:~$ |
使用rm symlinkname,但末端不包括正斜杠(不要使用:rm symlinkname/)。然后会询问您是否要删除symlink,y回答"是"。
- 你没有错,但是正确的答案已经在这里被接受了(4年前!)为什么要麻烦?
- 谷歌在搜索"删除一个符号链接"时将其作为特色代码片段。也许它喜欢它的简洁性,不知道它的启发式如何工作。不管怎么说,当我回头看我的命令行时,我立刻做了一个掌心。
假设它实际上是一个符号链接,
它应该能解决这个问题,但由于它不能实现,所以我们启用了一个潜在的代码,这个代码原本是为另一个不再存在的案例设计的,但却恰好在这里做了正确的事情。
如果rm无法删除symlink,可能需要查看包含symlink的目录上的权限。要删除目录项,需要对包含目录具有写权限。
假设您的设置类似于:ln -s /mnt/bar ~/foo,那么您应该能够毫无问题地执行rm foo。如果不能,请确保您是foo的所有者,并且有权写入/执行该文件。移除foo不会接触到bar,除非递归地进行。
我在Windows服务器上运行mingw(实际上是git bash)时遇到了这个问题。上述建议似乎都不起作用。最后A复制了目录,以防在Windows资源管理器中删除软链接,然后在回收站中删除该项目。它发出的声音像是在删除文件,但没有。不过,一定要备份!
- "它发出的声音就像是在删除文件……"—哇!
- LMFAO。"它发出噪音,好像在删除文件…"
- 我记得软盘!
- 以上都不适合我:eddyq@eddyq-latitude-e6440:~$ls桌面下载Dropbox Windows音乐公共视频w文档Dropbox示例。桌面图片模板"vmware vmx文件"
在CentOS上,只需运行rm linkname,它将要求"删除符号链接?".键入y和enter,链接将消失,目录将安全。