проблема решена красиво. Спасибо всем, кто ответил.
lukmac
8
Как я прокомментировал удаленный ответ, вы можете использовать -xtype lдля поиска только символические
ссылки
вы можете захотеть выполнить рекурсию, поскольку любой из файлов, указывающих на foo.txt, может сам указывать на другие ссылки ... например: A-> B-> foo.txt, / tmp / C-> B-> foo.txt и т. д.
Оливье Дюлак
это также может сработать, если ваш компонент имени является родительским каталогом, указанным в ссылке, путем поиска find . -lname '*foo.dir*'(например, соответствует file.txt -> ../foo.dir/file.txt)
Йонатан,
22
Найдите номер inode файла, а затем найдите все файлы с тем же номером inode:
Если вы используете последнюю версию GNU find, вы также можете использовать -samefileопцию с -Lдля того же эффекта, без необходимости самостоятельно искать inode
Hasturkun
5
Но это также найдет файлы в других файловых системах, которые имеют такой же номер inode.
DigitalRoss
Если fooэто каталог, используйте ln -diв одной строке:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
rubo77 07
1
Это неверный ответ. Символьная ссылка не имеет того же индексного дескриптора, что и ее цель. Это будет работать только для файла внутри папки с символической ссылкой. Но спрашивали не об этом.
Жюль Ламур
4
Я предпочитаю использовать symlinksутилиту, которая также удобна при поиске неработающих символических ссылок. Установил:
sudo apt install symlinks
Показать все символические ссылки в текущей папке и подпапках:
symlinks -rv .
-r: рекурсивный
-v: verbose (показать все символические ссылки, а не только битые)
Чтобы найти конкретную символическую ссылку, просто grep:
Ответы:
Это зависит от того, пытаетесь ли вы найти ссылки на конкретный вызываемый файл,
foo.txt,
тогда это единственный хороший способ:С другой стороны, если вы просто пытаетесь найти ссылки на любой файл, который случайно назван
foo.txt
, тогда что-то вродеили
источник
-xtype l
для поиска только символическиеfind . -lname '*foo.dir*'
(например, соответствуетfile.txt -> ../foo.dir/file.txt
)Найдите номер inode файла, а затем найдите все файлы с тем же номером inode:
В качестве альтернативы попробуйте
lname
вариантfind
, но это не сработает, если у вас есть относительные символические ссылки, напримерa -> ../foo.txt
источник
-samefile
опцию с-L
для того же эффекта, без необходимости самостоятельно искать inodefoo
это каталог, используйтеln -di
в одной строке:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
Я предпочитаю использовать
symlinks
утилиту, которая также удобна при поиске неработающих символических ссылок. Установил:Показать все символические ссылки в текущей папке и подпапках:
-r
: рекурсивный-v
: verbose (показать все символические ссылки, а не только битые)Чтобы найти конкретную символическую ссылку, просто
grep
:источник