How to delete a symbolic link in python?

Question:

I have been trying to delete some symbolic links in my working directory, but I am facing some issues.

os.remove also removes the actual contents of the original folder of the link

os.shutil throws up an error in case of symbolic links.

Is there a way to remove a symbolic link using python commands without destroying the original content?

Thanks

Asked By: akshayc11

||

Answers:

If the directory name contains a trailing slash, the linux rm command will follow the link and try to delete the directory. See Remove a symlink to a directory. The os.remove documentation says that it will give you an OSError if you try to remove a directory but maybe that doesn’t always happen in the case of symlinks.

Answered By: John Watts

os.unlink() works for me. It removes the symlink without removing the directory that it links to.

Answered By: samfrances

Sorry,my Bad, I had made a stupid programming mistake : I was stupidly deleting the source instead of the links.

The correct answer is by @samfrances.

os.unlink does the trick.

In addition to this, here some other tips if you want to clear a directory using python:

Definitely not threadsafe, but you get the idea…

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)
Answered By: akshayc11

The accepted answer does not work on Windows with links created via mklink /D. If that is your problem the answer has been posted in this question: Delete Symlink to directory on Windows

The following code should work on both systems:

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

in Python 3.4 and above,
If link is a file, use unlink().

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

If the path points to a directory, use Path.rmdir() instead.

>>> from pathlib import Path
>>> p = Path('/some/dir/')
>>> p.rmdir()
Answered By: SuperNova
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.