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


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- Файл відноситься до того ж inode, що і name. Коли -Lдіє, це може включати символьні посилання.

Примітки:

  • Використовуйте малі літери L -xtype l, а не цифру 1.
  • На macOS / Дарвін, -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(знайти каталоги з однаковим номером inode )

Він відобразить усі його символьні шляхи посилань.


4
Це знайде жорсткі посилання, а не символічні посилання. Жорсткі посилання поділяють номери даних. символьні посилання мають різні номери номерів. inode символічного посилання має шлях замість списку блоків.
hildred

питання не згадувало тверду або м'яку символічну посилання
nux

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