Ответ 1
os.unlink()
работает для меня. Он удаляет символическую ссылку, не удаляя каталог, к которому он привязан.
Я пытаюсь удалить некоторые символические ссылки в моем рабочем каталоге, но мне приходится сталкиваться с некоторыми проблемами.
os.remove
также удаляет фактическое содержимое исходной папки ссылки
os.shutil
вызывает ошибку в случае символических ссылок.
Есть ли способ удалить символическую ссылку, используя команды python, не разрушая исходный контент?
Спасибо
os.unlink()
работает для меня. Он удаляет символическую ссылку, не удаляя каталог, к которому он привязан.
Если имя каталога содержит конечную косую черту, команда linux rm
будет следовать за ссылкой и попытаться удалить каталог. См. Удалить символическую ссылку в каталог. Документация os.remove
говорит, что она даст вам OSError
, если вы попытаетесь удалить каталог, но, возможно, это не всегда происходит в случае символических ссылок.
Принятый ответ не работает в Windows со ссылками, созданными с помощью mklink /D
. Если это ваша проблема, в этом вопросе был отправлен ответ: Удалить Symlink в каталог в Windows
Следующий код должен работать в обеих системах:
if(os.path.isdir(targetLink)):
os.rmdir(targetLink)
else:
os.unlink(targetLink)
Извините, мой плохой, я совершил тупую ошибку программирования: я глупо удалял источник вместо ссылок.
Правильный ответ - @samfrances.
os.unlink
делает трюк.
В дополнение к этому, вот некоторые другие советы, если вы хотите очистить каталог с помощью python:
Определенно не threadafe, но вы получаете идею...
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)