8.16. oldlinks: Find Unconnected Symbolic Links
One problem with symbolic links is
that they're relatively "fragile"
(Section 10.6). The link and the file itself are
different kinds of entities; the link only stores the name of the
"real" file. Therefore, if you
delete or rename the real file, you can be left with a
"dead" or
"old" link: a link that points to a
file that doesn't exist.
This causes no end of confusion, particularly for new users. For
example, you'll see things like this:
% ls -l nolink
lrwxrwxrwx 1 mikel users 12 Nov 2 13:57 nolink -> /u/joe/afile
% cat nolink
cat: nolink: No such file or directory
The file's obviously there, but
cat tells you that it doesn't
exist.
There's no
real solution to this problem, except to be careful. Try writing a
script that checks links to see whether they exist.
Here's one such script from Tom Christiansen; it
uses find to track down all links and then uses
perl to print the names of links that point to
nonexistent files. (If you're a Perl hacker and
you'll be using this script often, you could replace
the Unix find utility with the
Perl File::Find
module.)
#!/bin/sh
find . -type l -print | perl -nle '-e || print'
The script only lists "dead" links;
it doesn't try to
delete them or do anything drastic. If
you want to take some other action (such as deleting these links
automatically), you can use the output of the script in backquotes (Section 28.14). For
example:
% rm `oldlinks`
-- ML
 |  |  | 8.15. newer: Print the Name of the Newest File |  | 8.17. Picking a Unique Filename Automatically |
Copyright © 2003 O'Reilly & Associates. All rights reserved.
|