Diskussion:Softlink/Problembehebung
Problembehebung
find all files that link to this file
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
- problem solved beautifully. Thanks to all people that replied.
- As I commented on a deleted answer, you can use -xtype l to have find only list symlinks
- you may want to recurse, as any of the files pointing to foo.txt may themselves be pointed-at by some other links... ex: A->B->foo.txt, /tmp/C->B->foo.txt, etc.
- this can work too if your name component is a parent directory named in the link, by searching find . -lname '*foo.dir*' (matches e.g. file.txt -> ../foo.dir/file.txt)
- This answer is really helpful, thanks so much. By the way, if we want to get more info about the results of "find", we can pass the output of "find" to "ls": find -L /usr -samefile /usr/share/pyshared/lsb_release.py 2>/dev/null | xargs ls -al
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*
If using a recent version of GNU find, you can also use the -samefile option with -L for the same effect, without having to look up the inode yourself
- But this will also find files on other file systems that happen to have the same inode number.
- If foo is a directory, use ln -di, in one line: find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
This answer is wrong
- A symlink doesn't have the same inode as its target. This will only work for a file inside a symlinked folder. But this is not what was asked.
symlinks utility
- 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*
Never heard of symlinks before (repo). 'A useful utility for maintainers of FTP sites, CDROMs, and Linux software distributions. It scans directories for symbolic links and lists them on stdout, often revealing flaws in the filesystem tree.' Great little ancient tool by ancient kernel hacker Mark Lord, the 'original developer and maintainer of the IDE Performance Package for linux, the Linux IDE Driver subsystem, hdparm', now maintained by J. Brandt Buckley.
Works great and is fast. Note, however, that you'll need to do a search in each discrete partition of interest (as symlinks does not reliably (AFAIK) search across what is calls "different filesystems"). Also, symlinks -rv . 2>/dev/null | grep foo.txt may result in "cleaner" output...