Как мне (рекурсивно) обнаружить все символические ссылки в каталоге, которые идентифицируют свою цель в абсолюте, а не относительным образом?
Так как эти ссылки могут быть разорваны при перемещении всего дерева каталогов, я хотел бы иметь способ их идентификации.
Даже относительные ссылки могут разрываться, если дерево каталогов перемещается (если они указывают на то, что они находятся вне корня дерева каталогов), но я думаю, что это решается в этом вопросе .
Ответы:
Для того, чтобы найти абсолютные ссылки, вы можете использовать
find
«s-lname
вариант , если вашиfind
опоры , что (он доступен по крайней мере , в GNUfind
, на FreeBSD и MacOS):При этом
find
необходимо напечатать имена файлов, которые являются символическими ссылками и чье содержимое (целевое) совпадает/*
с использованием оболочки.Строго говоря, POSIX указывает, что абсолютные пути начинаются с одного,
/
трех или более/
; чтобы соответствовать этому, вы можете использоватьНа каких системах // foo / bar отличается от / foo / bar? есть более подробная информация об этом.
(Спасибо Сато Кацура за то, что он указал, что
-lname
это специфично для GNU, fd0 за то, что он упомянул, что он на самом деле также доступен, по крайней мере, на FreeBSD и macOS, и Стефану Шазеласу за использование определения абсолютного пути POSIX.)источник
find ./ -t l -exec ls -l {} \;
что должно быть безопасной альтернативой. Было бы легко разобрать его вывод и делать то, что нужно.ls
? ...Вы можете найти
symlinks
полезную утилиту:И может исправить ссылки для вас. Вот,
-t
чтобы сказать, что он будет делать:источник