in reply to How does find() build its tree.

It uses the directory entries in the order that the system call readdir(3C) returns them in. This is related to their device number and inode, I believe. It's some particular order, although I'm not sure what order it is.

_____________________________________________________
Jeff[japhy]Pinyan: Perl, regex, and perl hacker.
s++=END;++y(;-P)}y js++=;shajsj<++y(p-q)}?print:??;

Replies are listed 'Best First'.
Re: Re: How does find() build its tree.
by Ras (Acolyte) on Jan 28, 2002 at 21:24 UTC
    Is there any way to sort what find returns by the time
    stamp?
      File::Find just retrieves all of the filenames and calls your "wanted" function once on each name. Anything more sophisticated has to be implemented by you in terms of this "wanted" function.

      For example, the following script will perform a find on /tmp, then print all of the file names in order from most recent to oldest:

      #!/usr/bin/perl -w use strict; use File::Find; my @files; sub wanted { push @files, [ $File::Find::name, -M $_ ]; } find(\&wanted, "/tmp"); foreach (sort {$a->[1] <=> $b->[1]} @files) { print $_->[0], "\n"; }
      As you can see, within the wanted function, we collect each filename and the time it was last modified. Once find() finishes, we then sort the files into the desired order and print them out.
      See the preprocess argument -- if you pass a code reference, it'll apply it to the list returned by readdir before calling your wanted coderef. Something like this, perhaps:
      find({ wanted => \&wanted, preprocess => sub { sort { -M $a <=> -M $b } @_; }, }, '.');
        Just to let you juys know, I think find returns the
        files in the order of 'ls -f'. Unless someone knows
        something else. Thanks for all your help.