问题
I have a folder on my server to which I had a number of symbolic links pointing. I've since created a new folder and I want to change all those symbolic links to point to the new folder. I'd considered replacing the original folder with a symlink to the new folder, but it seems that if I continued with that practice it could get very messy very fast.
What I've been doing is manually changing the symlinks to point to the new folder, but I may have missed a couple.
Is there a way to check if there are any symlinks pointing to a particular folder?
回答1:
I'd use the find command.
find . -lname /particular/folder
That will recursively search the current directory for symlinks to /particular/folder
. Note that it will only find absolute symlinks. A similar command can be used to search for all symlinks pointing at objects called "folder":
find . -lname '*folder'
From there you would need to weed out any false positives.
回答2:
You can audit symlinks with the symlinks program written by Mark Lord -- it will scan an entire filesystem, normalize symlink paths to absolute form and print them to stdout.
回答3:
There isn't really any direct way to check for such symlinks. Consider that you might have a filesystem that isn't mounted all the time (eg. an external USB drive), which could contain symlinks to another volume on the system.
You could do something with:
for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder
I note that FreeBSD's find
does not support the -lname
option, which is why I ended up with the above.
回答4:
find . -type l -printf '%p -> %l\n'
回答5:
Apart from looking at all other folders if there are links pointing to the original folder, I don't think it is possible. If it is, I would be interested.
回答6:
find / -lname 'fullyqualifiedpathoffile'
回答7:
find /foldername -type l -exec ls -lad {} \;
回答8:
For hardlinks, you can get the inode of your directory with one of the "ls" options (-i
, I think).
Then a find
with -inum
will locate all common hardlinks.
For softlinks, you may have to do an ls -l
on all files looking for the text after "->" and normalizing it to make sure it's an absolute path.
来源:https://stackoverflow.com/questions/100170/is-there-a-way-to-check-if-there-are-symbolic-links-pointing-to-a-directory