Есть ли способ проверить, есть ли символические ссылки, указывающие на каталог?
Вопрос
У меня на сервере есть папка, на которую указывало несколько символических ссылок.С тех пор я создал новую папку и хочу изменить все эти символические ссылки, чтобы они указывали на новую папку.Я подумывал о замене исходной папки символической ссылкой на новую папку, но кажется, что если я продолжу эту практику, это может очень быстро стать очень запутанным.
Я вручную менял символические ссылки, чтобы они указывали на новую папку, но, возможно, я пропустил пару.
Есть ли способ проверить, есть ли символические ссылки, указывающие на определенную папку?
Решение
Я бы использовал команду find.
find . -lname /particular/folder
Это будет рекурсивно искать в текущем каталоге символические ссылки на /particular/folder
.Обратите внимание, что он найдет только абсолютные символические ссылки.Аналогичную команду можно использовать для поиска всех символических ссылок, указывающих на объекты, называемые «папками»:
find . -lname '*folder'
После этого вам нужно будет отсеять любые ложные срабатывания.
Другие советы
Вы можете проверить символические ссылки с помощью тот symlinks
программа написанный Марком Лордом - он сканирует всю файловую систему, приводит пути к символическим ссылкам в абсолютную форму и выводит их на стандартный вывод.
На самом деле не существует прямого способа проверить такие символические ссылки.Учтите, что у вас может быть файловая система, которая не монтируется постоянно (например.внешний 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
найдет все распространенные жесткие ссылки.
Для программных ссылок вам, возможно, придется сделать ls -l
во всех файлах ищет текст после «->» и нормализует его, чтобы убедиться, что это абсолютный путь.