символічне посилання: знайдіть усі файли, що посилаються на цей файл


115

Привіт, все, мені потрібно зробити це в Linux:

  • Дано: ім'я файлу 'foo.txt'
  • Знайти: всі файли, які є символічними посиланнями на 'foo.txt'

Як це зробити? Дякую!


Відповіді:


132

Це залежить, якщо ви намагаєтеся знайти посилання на певний файл, який викликається, foo.txt,то це єдиний хороший спосіб:

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

З іншого боку, якщо ви просто намагаєтесь знайти посилання на будь-який файл, на який трапляється ім'я foo.txt, то щось подібне

find / -lname foo.txt

або

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

проблему вирішено красиво. Дякую всім людям, які відповіли.
lukmac

8
Коли я коментував видалену відповідь, ви можете використовувати -xtype lлише список символьних посилань у списку
Hasturkun

ви можете повторити, оскільки будь-який з файлів, що вказують на foo.txt, може бути вказаний деякими іншими посиланнями ... наприклад: A-> B-> foo.txt, / tmp / C-> B-> foo.txt тощо
Олів'є Дулак

це також може працювати, якщо ваш іменний компонент є батьківським каталогом, названим у посиланні, шляхом пошуку find . -lname '*foo.dir*'(відповідає, наприклад file.txt -> ../foo.dir/file.txt)
Yonatan

22

Знайдіть номер файлу inode та знайдіть усі файли з однаковим номером inode:

$ ls -i foo.txt
41525360 foo.txt

$ find . -follow -inum 41525360

Крім того, спробуйте lnameваріант find, але це не спрацює, якщо у вас є відносні посилання, наприкладa -> ../foo.txt

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

3
Якщо ви користуєтеся останньою версією пошуку GNU, ви також можете скористатись -samefileопцією з -Lтим же ефектом, не
потребуючи

5
Але це також знайде файли в інших файлових системах, які мають однаковий номер inode.
DigitalRoss

Якщо fooце каталог, використовуйте ln -diв одному рядку:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
rubo77

1
Ця відповідь неправильна. Симпосилання не має таку ж інеду, що і її ціль. Це працюватиме лише для файлу всередині папки, що має зв'язану зв’язок. Але це не те, про що питали.
Жуль Ламур

4

Я вважаю за краще використовувати symlinksутиліту, яка також зручна при пошуку зламаних символьних посилань. Встановити:

sudo apt install symlinks

Показати всі посилання в поточній папці та вкладених папках:

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

Щоб знайти конкретне символьне посилання, просто grep:

symlinks -rv . | grep foo.txt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.