如何删除python中的符号链接?

时间:2012-07-28 11:18:27

标签: python symlink

我一直在尝试删除工作目录中的一些符号链接,但我遇到了一些问题。

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

os.shutil在符号链接的情况下会抛出错误。

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

由于

5 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:3)

如果目录名称包含尾部斜杠,则linux rm命令将跟随该链接并尝试删除该目录。见Remove a symlink to a directoryos.remove documentation表示如果您尝试删除目录,它会为您提供OSError,但在符号链接的情况下可能并非总是如此。

答案 2 :(得分:3)

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

正确答案是@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)

答案 3 :(得分:3)

通过mklink /D创建的链接在Windows上无法使用已接受的答案。如果这是您的问题,则答案已在此问题中发布:Delete Symlink to directory on Windows

以下代码应适用于两个系统:

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

答案 4 :(得分:0)

在Python 3.4及更高版本中, 如果链接是文件,请使用unlink()

>>> from pathlib import Path
>>> p = Path('/some/file/')
>>> p.unlink()

如果路径指向目录,请改用Path.rmdir()。

>>> from pathlib import Path
>>> p = Path('/some/dir/')
>>> p.rmdir()