Ответы:
Это зависит от того, пытаетесь ли вы найти ссылки на конкретный вызываемый файл, foo.txt,
тогда это единственный хороший способ:
find -L / -samefile path/to/foo.txt
С другой стороны, если вы просто пытаетесь найти ссылки на любой файл, который случайно назван foo.txt
, тогда что-то вроде
find / -lname foo.txt
или
find . -lname \*foo.txt # ignore leading pathname components
-xtype l
для поиска только символические
find . -lname '*foo.dir*'
(например, соответствует file.txt -> ../foo.dir/file.txt
)
Найдите номер inode файла, а затем найдите все файлы с тем же номером inode:
$ ls -i foo.txt
41525360 foo.txt
$ find . -follow -inum 41525360
В качестве альтернативы попробуйте lname
вариант find
, но это не сработает, если у вас есть относительные символические ссылки, напримерa -> ../foo.txt
$ find . -lname /path/to/foo.txt
-samefile
опцию с -L
для того же эффекта, без необходимости самостоятельно искать inode
foo
это каталог, используйте ln -di
в одной строке:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
Я предпочитаю использовать symlinks
утилиту, которая также удобна при поиске неработающих символических ссылок. Установил:
sudo apt install symlinks
Показать все символические ссылки в текущей папке и подпапках:
symlinks -rv .
-r
: рекурсивный-v
: verbose (показать все символические ссылки, а не только битые)Чтобы найти конкретную символическую ссылку, просто grep
:
symlinks -rv . | grep foo.txt