Reputation: 575
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
Upvotes: 44
Views: 70640
Reputation: 3685
os.unlink()
works for me. It removes the symlink without removing the directory that it links to.
Upvotes: 59
Reputation: 27456
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()
Upvotes: 3
Reputation: 8654
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)
Upvotes: 10
Reputation: 575
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)
Upvotes: 7
Reputation: 8875
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.
Upvotes: 1