Привет всем, мне нужно сделать это в Linux:
- Дано: имя файла 'foo.txt'
- Найти: все файлы, которые являются символическими ссылками на «foo.txt».
Как это сделать? Спасибо!
Привет всем, мне нужно сделать это в Linux:
Как это сделать? Спасибо!
Это зависит от того, если вы пытаетесь найти ссылки на конкретный файл с именем foo.txt,
, то это единственный хороший способ:
find -L / -samefile path/to/foo.txt
С другой стороны, если вы просто пытаетесь найти ссылки на любой файл с именем foo.txt
, тогда что-то вроде
find / -lname foo.txt
or
find . -lname \*foo.txt # ignore leading pathname components
-xtype l
, чтобы найти только список символических ссылок.
- person Hasturkun; 31.05.2011
find . -lname '*foo.dir*'
(соответствует, например, file.txt -> ../foo.dir/file.txt
)
- person Yonatan; 07.06.2017
Найдите номер инода файла, а затем найдите все файлы с таким же номером инода:
$ ls -i foo.txt
41525360 foo.txt
$ find . -follow -inum 41525360
В качестве альтернативы попробуйте вариант lname
для find
, но это не сработает, если у вас есть относительные символические ссылки, например. a -> ../foo.txt
$ find . -lname /path/to/foo.txt
-samefile
с -L
для того же эффекта, без необходимости самостоятельно искать индексный дескриптор.
- person Hasturkun; 31.05.2011
foo
— это каталог, используйте ln -di
в одной строке: find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
- person rubo77; 07.08.2016
Я предпочитаю использовать утилиту symlinks
, которая также удобна при поиске битых симлинков. Установить:
sudo apt install symlinks
Показать все символические ссылки в текущей папке и подпапках:
symlinks -rv .
-r
: рекурсивный-v
: подробный (показать все симлинки, а не только битые)Чтобы найти конкретную символическую ссылку, просто grep
:
symlinks -rv . | grep foo.txt