Есть ли способ проверить, есть ли символические ссылки, указывающие на каталог? - PullRequest
60 голосов
/ 19 сентября 2008

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

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

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

Ответы [ 8 ]

75 голосов
/ 19 сентября 2008

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

find . -lname /particular/folder

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

find . -lname '*folder'

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

7 голосов
/ 13 марта 2012

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

5 голосов
/ 19 сентября 2008

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

Вы можете сделать что-нибудь с:

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

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

3 голосов
/ 08 октября 2010
find . -type l -printf '%p -> %l\n'
2 голосов
/ 19 сентября 2008

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

1 голос
/ 03 января 2014
find /foldername -type l -exec ls -lad {} \;
1 голос
/ 19 сентября 2008

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

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

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

1 голос
/ 19 сентября 2008
find / -lname 'fullyqualifiedpathoffile'
...