Полезная информация


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.


DISCLAIMER

We are painfully aware that these documents may contain incorrect links and misformatted HTML. Such bugs lie in the automatic translation process that automatically created the hundreds and hundreds of separate documents that you find here. Please do not report link or formatting bugs, because we cannot fix per-document problems. The only bug reports that will help us are those that supply working patches to the installhtml or pod2html programs, or to the Pod::HTML module itself, for which I and the entire Perl community will shower you with thanks and praises.

If rather than formatting bugs, you encounter substantive content errors in these documents, such as mistakes in the explanations or code, please use the perlbug utility included with the Perl distribution.

--Tom Christiansen, Perl Documentation Compiler and Editor


Return to the Perl Documentation Index.
Return to the Perl Home Page.