symbolic link: find all files that link to this file

Solution 1:

It depends, if you are trying to find links to a specific file that is called foo.txt, then this is the only good way:

find -L / -samefile path/to/foo.txt

On the other hand, if you are just trying to find links to any file that happens to be named foo.txt, then something like

find / -lname foo.txt

or

find . -lname \*foo.txt # ignore leading pathname components

Solution 2:

Find the inode number of the file and then search for all files with the same inode number:

$ ls -i foo.txt
41525360 foo.txt

$ find . -follow -inum 41525360

Alternatively, try the lname option of find, but this won't work if you have relative symlinks e.g. a -> ../foo.txt

$ find . -lname /path/to/foo.txt

Solution 3:

I prefer to use the symlinks utility, which also is handy when searching for broken symlinks. Install by:

sudo apt install symlinks

Show all symlinks in current folder and subfolders:

symlinks -rv .
  • -r: recursive
  • -v: verbose (show all symlinks, not only broken ones)

To find a specific symlink, just grep:

symlinks -rv . | grep foo.txt