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

StackOverflow https://stackoverflow.com/questions/100170

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Я бы использовал команду 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 во всех файлах ищет текст после «->» и нормализует его, чтобы убедиться, что это абсолютный путь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top