Назад | Перейти на главную страницу

Как найти какие-либо символические ссылки, указывающие за пределы данного дерева папок?

У меня есть куча папок / файлов на 10+ уровней.

Как мне найти какие-либо символические ссылки, указывающие за пределы этого дерева папок?

Я попытался find -type l но это возвращает все программные ссылки ... даже те, место назначения которых находится в дереве папок.

Спасибо

Если все цели символьных ссылок являются абсолютными, вы можете сделать что-то вроде этого:

find /folder/tree -type l -not -lname '/folder/tree/*' -print

Однако, если в вашем дереве есть относительные ссылки, особенно те, которые ./ или ../ встроенные в целевые пути, вам, вероятно, потребуется перебрать каждый из них, чтобы нормализовать цель, а затем посмотреть, соответствует ли она дереву папок:

find /folder/tree -type l -print | \
    while read symlink
    do
        target=$(readlink -f "$symlink")
        expr match "$target" "^/folder/tree/.*" >/dev/null || echo "$symlink"
    done
# end of pipeline

Оба делают одно и то же, а именно распечатывают каждую символическую ссылку, цель которой не соответствует /folder/tree.