@node File/Find, File/Flock, File/CounterFile, Module List
@unnumbered traverse a file tree


@unnumberedsec NAME

find - traverse a file tree

finddepth - traverse a directory structure depth-first

@unnumberedsec SYNOPSIS

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

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

@unnumberedsec 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
@code{"$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, 

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

produces something like:

@example
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);
@}
@end example

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

@code{finddepth} is just like @code{find}, except that it does a depth-first
search.

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

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

