Как найти и перечислить все символические ссылки, созданные для определенного файла?

52

Я создал много символических ссылок на различные пути для определенного файла или каталога. Я хочу весь список созданных путей символических ссылок (местоположение).

Пример:

Я создал символические ссылки на ~/Picturesкаталог во многих каталогах. Как мне перечислить все символические ссылки на этот ~/Picturesкаталог?

Это возможно? Если да, то как?

Авинаш Радж
источник
Вы должны искать исчерпывающий поиск, там не хранится счетчик, как для жестких ссылок. Смотрите один из ответов, используя поиск.
Ctrl-Alt-Delor

Ответы:

42

Вот пример:

find -L /dir/to/start -xtype l -samefile ~/Pictures

или, может быть, лучше:

find -L /dir/to/start -xtype l -samefile ~/Pictures 2>/dev/null

чтобы избавиться от некоторых ошибок, таких как Permission denied, Too many levels of symbolic linksили File system loop detectedкоторые findвыдают их, когда не имеет необходимых разрешений или других ситуаций.

  • -L - Следуйте по символическим ссылкам.

  • -xtype l - файл является символической ссылкой

  • -samefile name- Файл ссылается на тот же индекс, что и name. Когда -Lдействует, это может включать символические ссылки.

Примечания:

  • Используйте строчную букву L in -xtype l, а не цифру 1.
  • На macOS / Darwin -xtypeесть -type.
Раду Рэдяну
источник
Может ли команда быть изменена, чтобы найти символическую ссылку, которая содержит путь? например, файлы в системе, которые могут ссылаться на ~ / Pictures / A, ~ / Pictures / A / B / C, или любые файлы в подкаталогах ~ / Pictures>
заснеженный
7

Очень простой вариант использования -lname:

find / -lname /path/to/original/dir

От man find:

-lname pattern
       File is a symbolic link whose contents match shell pattern pattern.  The
       metacharacters do not treat `/' or `.' specially.  If the -L option or the
       -follow option is in effect, this test returns false unless the symbolic link
       is broken.

Примечание . Помните, что символические ссылки могут быть где угодно, включая удаленную систему (если вы обмениваетесь файлами), поэтому вы не сможете найти их все.

Абденнур ТУМИ
источник
Обратите внимание также, что если символическая ссылка является относительным путем, подобным, ../dirто она не найдет абсолют, который /path/to/original/dirвы можете вместо этого использовать шаблон и отсеять ложные срабатывания-lname \*dir
Jason S
2

Попробуй это :

ls -i ~/

277566 Pictures

find . -follow -inum 277566(найти каталоги с тем же номером инода )

Он будет отображать все свои пути символических ссылок.

Nux
источник
4
Это найдет жесткие ссылки, а не символические ссылки. Жесткие ссылки делят номера инодов. символические ссылки имеют разные номера инодов. Индекс символической ссылки имеет путь вместо списка блоков.
hildred
вопрос не упомянул жесткую или мягкую символическую ссылку
nux