File::Find

File::Find(3)          Perl Programmers Reference Guide          File::Find(3)



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.









3rd Berkeley Distribution    perl 5.005, patch 02                File::Find(3)