У меня есть куча папок / файлов на 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
.