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

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

Пример:

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

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

52
задан 16.05.2020, 07:11

4 ответа

Вот пример:

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 в [1 111], не цифра 1.
  • На macOS / Darwin, -xtype -type.
42
ответ дан 16.05.2020, 07:13
  • 1
    Команда могла быть изменена для нахождения символьной ссылки, которая содержит путь? например, файлы через систему, которая может связаться с ~/Pictures/A, ~/Pictures/A/B/C, или любые файлы в подкаталогах ~/Pictures> – No Window 16.05.2020, 07:14

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

ls -i ~/

277566 Pictures

find . -follow -inum 277566 (находят каталоги с тем же число inode )

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

2
ответ дан 16.05.2020, 07:11
  • 1
    вопрос didn' t упоминают трудную или мягкую символьную ссылку – eaglei22 16.05.2020, 07:11
  • 2
    Это найдет жесткие ссылки, не символьные ссылки. Жесткие ссылки совместно используют inode числа. символьные ссылки имеют различные inode числа. inode символьной ссылки имеет путь вместо черного списка. – Брайков 16.05.2020, 07:12

Мне нравится эта острота больше всего:

find . -maxdepth 1 -type l -exec readlink -f '{}' \;

судьи:

https://unix.stackexchange.com/questions/22128/how-to-get-full-path-of-original-file-of-a-soft-symbolic-link

h ttps://unix.stackexchange.com/questions/21984/list-symlinks-in-current-directory

0
ответ дан 16.05.2020, 07:12

Очень простой, используйте опцию -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.

Примечание : Помните, что символьные ссылки могли быть где угодно, который включает удаленную систему (если файлы совместно использующего you’re), таким образом, Вы не можете быть в состоянии определить местоположение их всех.

7
ответ дан 16.05.2020, 07:12
  • 1
    Отметьте также, если символьная ссылка является относительным путем как ../dir тогда это won' t находят абсолют /path/to/original/dir, можно вместо этого использовать шаблон и избавиться от ложных положительных сторон -lname \*dir – Leniel Maccaferri 16.05.2020, 07:13

Теги

Похожие вопросы