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


15

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

Я хочу удалить такой каталог, но я не уверен, что это безопасно, так как в другом каталоге (давайте назовем его /dir2) у меня могут быть символические ссылки, указывающие на внутренние части /dir1.

Кроме того, я мог создать эти символические ссылки, используя абсолютные или относительные пути. Моя единственная помощь - я знаю, что символические ссылки, которые я хочу проверить, находятся на смонтированной файловой системе /dir2.

Ответы:


15

Вы можете найти все символические ссылки, используя:

find / -type l 

Возможно, вы захотите запустить его как root, чтобы попасть в любое место на диске.

Вы можете расширить их, используя, readlink -fчтобы получить полный путь ссылки, и вы должны иметь возможность grepвыводить данные в целевой каталог, который вы хотите удалить:

find / -type l -exec readlink -f {} + | grep -F /dir2

Использование find / -type l -printf '%l\n'не работает, так как вы получаете относительные ссылки, ../tmp/xyzкоторые могут указывать на ваш целевой каталог, но не совпадают, потому что они не полностью раскрыты.


1
В случае поддерева может быть полезно перейти по символическим find -L /subtree -xtype l -exec readlink -f {} +
ссылкам

3

В моем случае принятый ответ оказался бесполезным (поскольку он не выводил источник ссылки). Вот что сработало для меня.

Я работал над этим, используя два -execусловия:

find /home/ -type l -exec readlink -nf {} ';' -exec echo " -> {}" ';' | grep "/dir2"

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.