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


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.