2012-07-28 29 views
17

我一直在试图删除我的工作目录中的一些符号链接,但我面临一些问题。如何删除python中的符号链接?

os.remove也删除链接的原始文件夹的实际内容

os.shutil在符号链接的情况下,抛出了一个错误。

有没有办法在不破坏原始内容的情况下使用python命令删除符号链接?

感谢

+7

奇怪,'os.remove()'不删除原始文件我,只有符号链接(用Python 2.7.2和3.1.4试用)。 – 2012-07-28 11:28:05

+1

它不会删除原始文件在我的系统(Python 2.7.1) – 2012-07-28 11:29:16

+0

Smth值得在符号链接上看:http://stackoverflow.com/a/12678252/110118 (注意:shutil.rmtree将无法删除一个链接,尽管os.path.osdir()说路径属于一个目录) – mlvljr 2015-08-29 22:44:32

回答

20

os.unlink()适合我。它删除符号链接而不移除链接到的目录。

+0

是的..它工作了谢谢 – akshayc11 2012-07-29 09:48:38

+10

Python 2.7的文档说关于unlink:'这和remove();'是一样的,它是如何解决这个问题的? – 2013-04-03 11:20:24

+0

此解决方案不适用于通过'mklink/D'创建的目录链接。如果这是您的问题,请在下面查看我的答案。 – MOnsDaR 2016-01-05 07:11:05

3

如果目录名称中包含尾随斜线,Linux的rm命令将按照链接,并尝试删除该目录。请参阅Remove a symlink to a directoryos.removedocumentation表示如果您尝试删除一个目录,它会给你一个OSError,但在符号链接的情况下可能并不总是这样。

+1

它说'OSError:[Errno 1]不允许操作:'测试/''对我来说。可能它是依赖于实现的。 – 2012-07-28 11:32:38

+1

我没有python方便。我应该说这是一个猜测。我编辑了答案。 – 2012-07-28 12:00:00

+0

@JohnWatts你的回答是真实的,但这只适用于由shell创建的符号链接。 'os.symlink'创建的符号链接仍然给出相同的问题 – akshayc11 2012-07-29 09:43:53

1

对不起,我的坏,我犯了一个愚蠢的编程错误:我愚蠢地删除源而不是链接。

正确的答案是@samfrances。

os.unlink有窍门。

除此之外,在这里,如果你想使用Python来清除目录中的一些其他提示:

肯定不是线程安全的,但你的想法...

def rm(obj): 

    if os.path.exists(obj): 
     if os.path.isdir(obj): 
      if os.path.islink(obj): 
       os.unlink(obj) 
      else: 
       shutil.rmtree(obj) 
     else: 
      if os.path.islink(obj): 
       os.unlink(obj) 
      else: 
       os.remove(obj) 
+0

做'如果os.path.exists(obj)'然后'如果os.path.islink'然后'如果os.path.isdir'。这样你就不需要两次使用os.unlink。 – QxQ 2013-04-28 04:32:34

2

接受的答案呢不适用于Windows,通过mklink /D创建链接。如果这是你的问题的答案已经被张贴在这个问题:Delete Symlink to directory on Windows

下面的代码应在两个系统上的工作:

if(os.path.isdir(targetLink)): 
    os.rmdir(targetLink) 
else: 
    os.unlink(targetLink)