icarus wrote:
>
hi are you doing everybody...

How can I sort files by timestamp without slurping?

the idea is to look into a directory, pick up the oldest first and so
on until the 'youngest' one.
file100..all the way to file1.

I found this solution somewhere,

my @sorted = map { $_->[0] }
            sort { $b->[1] <=> $a->[1] }
             map { [ $_, -M $_ ] }
           @files;

By the looks of it, it does slurp the all the files from the source
directory into an array and does the sorting there.

I'm thinking on incorporating a timestamp sorting mechanism without
slurping.

Since above solution looks like sorcery of some kind to me,
How can I modify it to fit below?  or if you have any other ideas
please let me know.  Thanks in advance.

MOVE_FILES:
while (defined (my $file = readdir (SOURCEDIR))){

      #skip . and .. files
      next MOVE_FILES if $file =~ m#^\.\.?$#;

      #the sorting should it take place here I guess.


       #move files
       move ($file, $target_path) or die $!;
}

By 'slurping' do you mean reading all of the directory at once? Because
that cannot be avoided as you need a list of files for there to be
anything to sort. If you mean reading all of the individual files tho,
then that's fine as there's no need to read the file at all.

The sort you show has been optimised for speed. In all probability a
standard sort will do fine and you would end up with something like
the code below.

HTH,

Rob



use strict;
use warnings;

my $dir = 'mydir';

opendir my $dh, "$dir\\" or die $!;

my @files = map "$dir\\$_", readdir $dh;

my @sorted = sort { -M $b <=> -M $a } @files;


--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to