我一直在试图删除我的工作目录中的一些符号链接,但我面临一些问题。如何删除python中的符号链接?
os.remove
也删除链接的原始文件夹的实际内容
os.shutil
在符号链接的情况下,抛出了一个错误。
有没有办法在不破坏原始内容的情况下使用python命令删除符号链接?
感谢
我一直在试图删除我的工作目录中的一些符号链接,但我面临一些问题。如何删除python中的符号链接?
os.remove
也删除链接的原始文件夹的实际内容
os.shutil
在符号链接的情况下,抛出了一个错误。
有没有办法在不破坏原始内容的情况下使用python命令删除符号链接?
感谢
如果目录名称中包含尾随斜线,Linux的rm
命令将按照链接,并尝试删除该目录。请参阅Remove a symlink to a directory。 os.remove
documentation表示如果您尝试删除一个目录,它会给你一个OSError
,但在符号链接的情况下可能并不总是这样。
它说'OSError:[Errno 1]不允许操作:'测试/''对我来说。可能它是依赖于实现的。 – 2012-07-28 11:32:38
我没有python方便。我应该说这是一个猜测。我编辑了答案。 – 2012-07-28 12:00:00
@JohnWatts你的回答是真实的,但这只适用于由shell创建的符号链接。 'os.symlink'创建的符号链接仍然给出相同的问题 – akshayc11 2012-07-29 09:43:53
对不起,我的坏,我犯了一个愚蠢的编程错误:我愚蠢地删除源而不是链接。
正确的答案是@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)
做'如果os.path.exists(obj)'然后'如果os.path.islink'然后'如果os.path.isdir'。这样你就不需要两次使用os.unlink。 – QxQ 2013-04-28 04:32:34
接受的答案呢不适用于Windows,通过mklink /D
创建链接。如果这是你的问题的答案已经被张贴在这个问题:Delete Symlink to directory on Windows
下面的代码应在两个系统上的工作:
if(os.path.isdir(targetLink)):
os.rmdir(targetLink)
else:
os.unlink(targetLink)
奇怪,'os.remove()'不删除原始文件我,只有符号链接(用Python 2.7.2和3.1.4试用)。 – 2012-07-28 11:28:05
它不会删除原始文件在我的系统(Python 2.7.1) – 2012-07-28 11:29:16
Smth值得在符号链接上看:http://stackoverflow.com/a/12678252/110118 (注意:shutil.rmtree将无法删除一个链接,尽管os.path.osdir()说路径属于一个目录) – mlvljr 2015-08-29 22:44:32