- NAME
- SYNOPSIS
- DESCRIPTION
- BUGS

# 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 first argument to `find()` is either a hash reference describing the operations to be performed for each file, or a code reference. If it is a hash reference, then the value for the key `wanted` should be a code reference. This code reference is called the wanted() function below.

Currently the only other supported key for the above hash is `bydepth`, in presense of which the walk over directories is performed depth-first. Entry point `finddepth()` is a shortcut for specifying `{ bydepth =` 1}> in the first argument of `find().`

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 useful 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";
        }

# BUGS

There is no way to make find or finddepth follow symlinks.