Как остановить рекурсивную символическую ссылку

У меня есть следующая папка:

  • Folder A
    • Folder B (which is a symbolic link to Folder A)

Проблема в том, что когда я получаю доступ к папке B, я могу бесконечно углубляться (т.е. папка A> папка B> папка B> папка B), потому что папка B находится внутри папки A.

Есть ли способ игнорировать папку B после доступа к ней через папку A?

Большое спасибо!


person Kentricks    schedule 08.07.2019    source источник


Ответы (2)


Команда find обнаруживает циклы символических ссылок и печатает предупреждающее сообщение вместо того, чтобы повторять их повторно. Например, при использовании опции -L для перехода по символическим ссылкам может быть напечатано следующее предупреждение:

$ find -L /some/path

find: File system loop detected; `/some/path/link' is part of the same file system loop as `/some/path'.

Со страницы руководства:

          The find utility shall detect infinite loops; that is,
          entering a previously visited directory that is an ancestor of
          the last file encountered.  When it detects an infinite loop,
          find shall write a diagnostic message to standard error and
          shall either recover its position in the hierarchy or
          terminate.
person IronMan    schedule 08.07.2019

Для всех программистов, которые ищут здесь (вопросы об инструменте cmdline вместо этого следует отправлять на unix.stackexchange.com):

Вы должны знать, что функция Linux/BSD fts_open() дает вам простой в использовании итератор для обхода всего содержимого подкаталога, а также для обнаружения таких рекурсий символических ссылок.

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

person Thomas Tempelmann    schedule 28.07.2021