我一直在尝试删除工作目录中的一些符号链接,但我遇到了一些问题。
os.remove
还会删除链接原始文件夹的实际内容
os.shutil
在符号链接的情况下抛出错误。
有没有办法在不破坏原始内容的情况下使用python命令删除符号链接?
谢谢
os.unlink()
为我工作。它删除符号链接而不删除它链接到的目录。
如果目录名称包含尾部斜杠,则linux rm
命令将跟随该链接并尝试删除该目录。见Remove a symlink to a directory。 os.remove
documentation说如果你试图删除一个目录它会给你一个OSError
但是在符号链接的情况下并不总是这样。
对不起,我的坏,我犯了一个愚蠢的编程错误:我愚蠢地删除了源而不是链接。
正确的答案是@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)
接受的答案在Windows上不起作用,通过mklink /D
创建链接。如果这是你的问题,那么答案已经发布在这个问题:Delete Symlink to directory on Windows
以下代码应适用于两个系统:
if(os.path.isdir(targetLink)):
os.rmdir(targetLink)
else:
os.unlink(targetLink)
在Python 3.4及更高版本中,如果link是文件,请使用unlink()
。
>>> from pathlib import Path
>>> p = Path('/some/file/')
>>> p.unlink()
如果路径指向目录,请改用Path.rmdir()。
>>> from pathlib import Path
>>> p = Path('/some/dir/')
>>> p.rmdir()