


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


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, a
       code reference, or a string that contains a subroutine
       name.  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:










29/Apr/1999            perl 5.005, patch 03                     1





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


           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.






























29/Apr/1999            perl 5.005, patch 03                     2


