Как я могу сказать, является ли файл потомком данного каталога?

На поверхности это довольно просто, и я мог реализовать ее сам легко. Просто последовательно назовите dirname (), чтобы повыситься каждый уровень в пути файла и проверить каждого, чтобы видеть, является ли это каталог, мы проверяем на.

Но символьные ссылки бросают все это в хаос. Любой каталог вдоль пути любого, проверяемый файл или каталог мог быть символьной ссылкой и любой символьной ссылкой, мог иметь произвольную цепочку символьных ссылок на другие символьные ссылки. В этой точке мои мозговые плавки и я не уверены, что сделать. Я попытался писать код для обработки этих особых случаев, но он скоро является слишком сложным, и я предполагаю, что делаю его неправильно. Существует ли довольно изящный способ сделать это?

Я использую Python, таким образом, любое упоминание о библиотеке, которая делает это, было бы прохладно. Иначе это - довольно нейтральная в отношении языка проблема.

7
задан mackstann 25 July 2010 в 04:30
поделиться

1 ответ

Используйте os.path.realpath и os.path.commonprefix:

os.path.commonprefix(['/the/dir/', os.path.realpath(filename)]) == "/the/dir/"

os.path.realpath расширит любые симлинки, а также ... в имени файла. os.path.commonprefix немного непостоянен - он не проверяет пути, а только префиксы строк, поэтому вы должны убедиться, что ваш каталог заканчивается разделителем каталогов. В противном случае он будет утверждать, что /the/dirtwo/filename также находится в /the/dir

8
ответ дан 7 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: