2013-12-06 4 views
2

Я пытаюсь удалить набор каталогов, за исключением тех, которые используются, и symlink ed в другом месте.Как определить, является ли данный каталог символьной ссылкой на Python?

Что является наиболее эффективным способом определить, является ли данный каталог symlink ed?

Я пробовал os.stat(dir).mt_nlink, но он возвращает 3 даже для каталогов, которые я хочу удалить.

EDIT:

По symlinked к Я имею в виду этот каталог является объектом некоторой линке.

+0

Возможный дубликат [Проверить, является ли файл символической ссылкой в ​​python] (http://stackoverflow.com/questions/11068419/check-if-file-is-symlink-in-python) – alko

+0

@alko не тот, но может быть этим [Есть ли способ проверить, есть ли символические ссылки, указывающие на каталог?] (http://stackoverflow.com/questions/100170/is-there-a-way-to-check-if-there- are-symbolic-links-pointing-to-a-directory) –

ответ

5

Нет простого способа определить, сделал ли кто-то другой ссылку на данный «жесткий» каталог. Вы можете проверить, является ли данный каталог символической ссылкой на другой каталог.

Это означает, что вам нужно пройти всю структуру каталогов, найти символические ссылки, а затем проверить, указывают ли они на соответствующий каталог.

Символьная ссылка - это специальный файл, который указывает на другой файл/каталог, где-то в вашей структуре каталогов. Symlinks также может указывать на другие файловые системы. Создание символической ссылки не изменяет индексный файл целевого файла/папки (в отличие от жестких ссылок), поэтому вы не можете определить, глядя на цель, только на самой ссылке.

0

Использование os.path.islink.

Вы также можете проверить, является ли путь неправильной ссылкой, используя os.path.lexists (файл является неработающей ссылкой, если он lexists() and not exists()).

+0

Если вы уже знаете, что путь является символической ссылкой, вам не нужно вызывать 'lexists', чтобы увидеть, если он сломан -' не существует (ссылка) 'достаточно , – lvc

2

os.path.islink(path).

Прямо из документации:

Возвращает True, если путь относится к записи каталога, который является символическим ссылки. Всегда False, если символические ссылки не поддерживаются.

Смежные вопросы