Як знайти всі символічні посилання, що вказують на будь-який файл / каталог всередині заданої директорії


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 {} +
ruvim

3

У моєму випадку прийнята відповідь виявилася не корисною (оскільки вона не виводила джерело посилання). Ось що для мене спрацювало.

Я працював над цим, використовуючи два -execпункти:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.