Подтвердить что ты не робот

Как удалить символическую ссылку в python?

Я пытаюсь удалить некоторые символические ссылки в моем рабочем каталоге, но мне приходится сталкиваться с некоторыми проблемами.

os.remove также удаляет фактическое содержимое исходной папки ссылки

os.shutil вызывает ошибку в случае символических ссылок.

Есть ли способ удалить символическую ссылку, используя команды python, не разрушая исходный контент?

Спасибо

4b9b3361

Ответ 1

os.unlink() работает для меня. Он удаляет символическую ссылку, не удаляя каталог, к которому он привязан.

Ответ 2

Если имя каталога содержит конечную косую черту, команда linux rm будет следовать за ссылкой и попытаться удалить каталог. См. Удалить символическую ссылку в каталог. Документация os.remove говорит, что она даст вам OSError, если вы попытаетесь удалить каталог, но, возможно, это не всегда происходит в случае символических ссылок.

Ответ 3

Принятый ответ не работает в Windows со ссылками, созданными с помощью mklink /D. Если это ваша проблема, в этом вопросе был отправлен ответ: Удалить Symlink в каталог в Windows

Следующий код должен работать в обеих системах:

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

Ответ 4

Извините, мой плохой, я совершил тупую ошибку программирования: я глупо удалял источник вместо ссылок.

Правильный ответ - @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)