in reply to Recursive Subdirectories

You're in luck! Recursively searching directories is much easier than this.

use strict; use File::Find; find (\&wanted, '.'); sub wanted { next if -d; # skip if it's a directory # $_ is the name of the file # $File::Find::name is the full path and name to the file }

See perldoc File::Find for more information.

With the above stub, just fill in the logic in the &wanted subroutine.

Cheers,
Ovid

New address of my CGI Course.
Silence is Evil (feel free to copy and distribute widely - note copyright text)

Replies are listed 'Best First'.
Re: Re: Recursive Subdirectories
by broquaint (Abbot) on Apr 16, 2003 at 16:45 UTC
    Recursively searching directories is much easier than this.
    Even easier than File::Find is File::Find::Rule
    use File::Find::Rule; my @files = find( file => exec => sub { -A < (time - (3600 * 24 * 10) }, in => '.', );
    See. the File::Find::Rule docs for more info on this fantabulous module.
    HTH

    _________
    broquaint

      exec => sub { -A < (time - (3600 * 24 * 10) },
      I was going to write the following:

      The module lets you write that more convieniently as:

      accessed => "<10",
      But on testing I found there is a subtle difference between the '-A' operator and the return value of atime from stat() (which FFR's 'atime' method uses) (update: and 'accessed' is just a binary method, it's 'atime' that uses stat) that makes both of our answers wrong. '-A' returns the length of time in days since the last access, and stat's atime is the last access time in epoch seconds. So the correct answer would be a combination of our answers:
      my $time = time - (3600 * 24 * 10); ... atime => ">=$time", # Or it would be about as easy to just say exec => sub { -A < 10 },
      Update: I was initially trying to use 'accessed' incorrectly, then I later found I should have been using 'atime'. Updated code. In FFR, 'accessed' is a binary/boolean method (which makes it practically useless) and doesn't take arguments. All '-X' operators are mapped to boolean methods in FFR, it would be nice to change this.

        -A is based on $^T not time(). So you want

        my $time = $^T - 10*24*60*60;
        no? (And yes, for fast-running scripts, the difference is not important.) (:

                        - tye