символьная ссылка: найти все файлы, которые ссылаются на этот файл

Алло все, мне нужно сделать это в linux:

  • дано: имя файла ' foo.txt'
  • найти: все файлы, которые являются символическими ссылками на ' foo.txt'

Как это сделать? Спасибо!

3 ответов


это зависит, если вы пытаетесь найти ссылки на конкретный файл, который называется foo.txt, тогда это единственный хороший способ:

find -L / -samefile path/to/foo.txt

С другой стороны, если вы просто пытаетесь найти ссылки на любой файл с именем foo.txt, потом что-то вроде

find / -lname foo.txt

или

find . -lname \*foo.txt # ignore leading pathname components

найдите номер индекса файла, а затем выполните поиск всех файлов с одинаковым номером индекса:

$ ls -i foo.txt
41525360 foo.txt

$ find . -follow -inum 41525360

в качестве альтернативы попробуйте на find, но это не будет работать, если у вас есть относительные ссылки, например a -> ../foo.txt

$ find . -lname /path/to/foo.txt

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

sudo apt install symlinks

показать все символические ссылки в текущей папке и подпапках:

symlinks -rv .
  • -r: рекурсивный
  • -v: verbose (показать все символические ссылки, а не только сломанные)

найти конкретную ссылку, просто grep:

symlinks -rv . | grep foo.txt