我一直在尝试删除工作目录中的一些符号链接,但是遇到了一些问题。
os.remove
还会删除链接原始目录的实际内容。
os.shutil
在处理符号链接时会报错。
是否有办法使用Python命令删除符号链接而不破坏原始内容?
谢谢
os.unlink()
对我来说很有效。它可以删除符号链接而不会删除链接到的目录。
mklink /D
创建的目录链接,在 Windows 上此解决方案无效。如果您遇到这个问题,请参见下面的答案。 - MOnsDaR如果你在Windows系统中通过mklink /D
创建了链接,则已接受的答案无法正常工作。如果这是你的问题,答案已经在这个问题中发布:Delete Symlink to directory on Windows
以下代码应该适用于两个系统:
if(os.path.isdir(targetLink)):
os.rmdir(targetLink)
else:
os.unlink(targetLink)
抱歉,我的错,我犯了一个愚蠢的编程错误:我愚蠢地删除了源而不是链接。
正确的答案是由@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
了。 - QxQunlink()
函数。>>> from pathlib import Path
>>> p = Path('/some/file/')
>>> p.unlink()
>>> from pathlib import Path
>>> p = Path('/some/dir/')
>>> p.rmdir()
os.symlink
创建的符号链接仍然存在相同的问题。 - akshayc11
os.remove()
对我来说没有删除原始文件,只删除了符号链接(使用 Python 2.7.2 和 3.1.4 进行了尝试)。 - Frédéric Hamidios.shutil
是什么? - cowlinator