summaryrefslogtreecommitdiff
path: root/pod/modpods/Find.pod
blob: 81b46a98794b9d5af4fb91ce3b97c149e5edf874 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
=head1 NAME

find - traverse a file tree

=head1 SYNOPSYS

    use File::Find;
    find(\&wanted, '/foo','/bar');
    sub wanted { ... }

=head1 DESCRIPTION

The wanted() function does whatever verificationsyou want.  $dir contains
the current directory name, and $_ the current filename within that
directory.  $name contains C<"$dir/$_">.  You are chdir()'d to $dir when
the function is called.  The function may set $prune to prune the tree.

This library is primarily for the C<find2perl> tool, which when fed, 

    find2perl / -name .nfs\* -mtime +7 \
	-exec rm -f {} \; -o -fstype nfs -prune

produces something like:

    sub wanted {
        /^\.nfs.*$/ &&
        (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
        int(-M _) > 7 &&
        unlink($_)
        ||
        ($nlink || (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_))) &&
        $dev < 0 &&
        ($prune = 1);
    }

Set the variable $dont_use_nlink if you're using AFS, since AFS cheats.

Here's another interesting wanted function.  It will find all symlinks
that don't resolve:

    sub wanted {
	-l && !-e && print "bogus link: $name\n";
    }