find - traverse a file tree

- NAME
- SYNOPSIS
- DESCRIPTION

# NAME

find - traverse a file tree

finddepth - traverse a directory structure depth-first

# SYNOPSIS

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

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

# DESCRIPTION

The `wanted()` function does whatever verifications you want. $File::Find::dir contains the current directory name, and `$_` the current filename within that directory. $File::Find::name contains `"$File::Find::dir/$_"`. You are `chdir()'d` to $File::Find::dir when the function is called. The function may set $File::Find::prune to prune the tree.

File::Find assumes that you don't alter the `$_` variable. If you do then make sure you return it to its original value before exiting your function.

This library is primarily for the 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 &&
            ($File::Find::prune = 1);
        }

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

`finddepth` is just like `find`, except that it does a depth-first search.

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

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