32

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

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

os.shutil在符号链接的情况下引发错误。

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

谢谢

4

5 回答 5

44

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

于 2012-07-28T21:56:30.067 回答
7

接受的答案不适用于通过mklink /D. 如果这是您的问题,答案已发布在此问题中:删除符号链接到 Windows 上的目录

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

if(os.path.isdir(targetLink)):
    os.rmdir(targetLink)
else:
    os.unlink(targetLink)
于 2016-01-05T07:15:37.097 回答
4

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

正确答案是@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)
于 2012-07-29T10:00:01.357 回答
2

如果目录名称包含尾部斜杠,linuxrm命令将跟随链接并尝试删除该目录。请参阅删除目录的符号链接os.remove 文档说,如果您尝试删除目录,它会给您一个提示,OSError但在符号链接的情况下,这可能并不总是发生。

于 2012-07-28T11:30:31.337 回答
2

在 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()
于 2019-02-22T15:48:39.837 回答