Есть ли способ проверить, есть ли символические ссылки, указывающие на каталог?
У меня есть папка на моем сервере, на которой я указывал несколько символических ссылок. С тех пор я создал новую папку, и я хочу изменить все эти символические ссылки, чтобы указать на новую папку. Я подумал о замене исходной папки символической ссылкой на новую папку, но кажется, что если бы я продолжил эту практику, это могло бы стать очень грязным очень быстро.
То, что я делал, - это изменение символических ссылок вручную, чтобы указать на новую папку, но я, возможно, пропустил пару.
Есть ли способ проверить, есть ли какие-либо символические ссылки, указывающие на определенную папку?
Ответы
Ответ 1
Я бы использовал команду find.
find . -lname /particular/folder
Это будет рекурсивно искать текущий каталог для символических ссылок на /particular/folder
. Обратите внимание, что он найдет только абсолютные символические ссылки. Аналогичную команду можно использовать для поиска всех символических ссылок, указывающих на объекты, называемые "папкой":
find . -lname '*folder'
Оттуда вам нужно будет отсеять любые ложные срабатывания.
Ответ 2
Вы можете проверять символические ссылки с помощью программы symlinks
, написанной Mark Lord, - он будет сканировать всю файловую систему, нормализовать пути символической ссылки на абсолютную форму и напечатать их в стандартном режиме.
Ответ 3
На самом деле нет прямого способа проверить такие символические ссылки. Учтите, что у вас может быть файловая система, которая не монтируется постоянно (например, внешний USB-накопитель), которая может содержать символические ссылки на другой том в системе.
Вы можете что-то сделать с помощью:
for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder
Я отмечаю, что FreeBSD find
не поддерживает параметр -lname
, поэтому я оказался выше.
Ответ 4
find . -type l -printf '%p -> %l\n'
Ответ 5
Помимо просмотра всех других папок, если есть ссылки, указывающие на исходную папку, я не думаю, что это возможно. Если это так, мне было бы интересно.
Ответ 6
find / -lname 'fullyqualifiedpathoffile'
Ответ 7
Для жестких ссылок вы можете получить inode вашего каталога с одним из параметров "ls" (-i
, я думаю).
Тогда a find
с -inum
найдет все общие жесткие ссылки.
Для программных ссылок вам может понадобиться ls -l
для всех файлов, которые ищут текст после "- > " и нормализуют его, чтобы убедиться, что это абсолютный путь.
Ответ 8
find /foldername -type l -exec ls -lad {} \;
Ответ 9
Отличный блог прямо здесь! Я действительно наслаждался вашей статьей! Большое спасибо! игры