Есть ли способ проверить, есть ли символические ссылки, указывающие на каталог?


У меня есть папка на моем сервере, на которую у меня было несколько символических ссылок. С тех пор я создал новую папку, и я хочу изменить все эти символические ссылки, чтобы указать на новую папку. Я рассматривал возможность замены исходной папки символической ссылкой на новую папку, но кажется, что если я продолжу эту практику, это может стать очень грязным очень быстро.

то, что я делал, - это вручную изменить символические ссылки, чтобы указать на новую папку, но я, возможно, пропустил пару.

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

8 54

8 ответов:

Я бы использовал команду find.

find . -lname /particular/folder

это будет рекурсивно искать текущий каталог для символических ссылок на /particular/folder. Обратите внимание, что он будет находить только абсолютные символические ссылки. Аналогичная команда может быть использована для поиска всех символических ссылок, указывающих на объекты, называемые "папка":

find . -lname '*folder'

оттуда вам нужно будет отсеять любые ложные срабатывания.

вы можете проверять символические ссылки с помощью the symlinks программа написано Mark Lord -- он будет сканировать всю файловую систему, нормализовать пути символических ссылок до абсолютной формы и распечатать их в stdout.

на самом деле нет никакого прямого способа проверить такие символические ссылки. Считайте, что у вас может быть файловая система не монтируется все время (например. внешний USB-накопитель), который может содержать символические ссылки на другой том в системе.

вы могли бы сделать что-то с:

for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder

Я отмечаю, что FreeBSD-это find не поддерживает -lname вариант, именно поэтому я в конечном итоге с выше.

find . -type l -printf '%p -> %l\n'

помимо просмотра всех других папок, если есть ссылки, указывающие на исходную папку, я не думаю, что это возможно. Если это так, мне было бы интересно.

find / -lname 'fullyqualifiedpathoffile'
find /foldername -type l -exec ls -lad {} \;

для жестких ссылок вы можете получить индекс вашего каталога с одним из параметров "ls" (-i, Я думаю).

тут find С -inum найдет все общие жесткие ссылки.

для softlinks, возможно, вам придется сделать ls -l на всех файлах, которые ищут текст после "- > " и нормализуют его, чтобы убедиться, что это абсолютный путь.