in reply to Delete directories older than 60 days

If you're stuck on the date portion, try this:
use warnings; use strict; use Date::Simple qw(date today); my $today = today(); while (<DATA>) { chomp; if (/(\d{2})(\d{2})(\d{4})/) { my $dir_date = date(sprintf '%4d-%02d-%02d', $3, $1, $2); print "delete $dir_date\n" if ($today - 60) > $dir_date; } } __DATA__ 11012014 11132014 10092014 09092014 11112015 01012015 04012015 01042011 10122014

Output:

delete 2014-09-09 delete 2011-01-04

Replies are listed 'Best First'.
Re^2: Delete directories older than 60 days
by Anonymous Monk on Nov 14, 2014 at 20:53 UTC
    Yes, it worked:
    ... use File::Path qw( rmtree ); use Date::Simple ('date', 'today'); ... my $dir = '/dir/'; opendir (DIR, $dir) or die "Couldn't open $dir directory, $!"; while (my $directories = readdir DIR) { next if $directories=~/^\./; if ($directories=~/(\d{2})(\d{2})(\d{4})/) { my $dir_date = date(sprintf '%4d-%02d-%02d', $3, $1, $2); if (($today - 60) > $dir_date) { rmtree("$dir/$directories")|| die ("ERROR::: cant delete: $!"); } } } closedir DIR;
    I woder if it could be done with "Time::Piece;" instead of "Date::Simple".
    But thanks for the help!
      Yes. In fact it even simplifies the code, and you can use the Core Time::Piece module:
      use warnings; use strict; use Time::Piece qw(); use Time::Seconds qw(ONE_DAY); my $t = Time::Piece->new(); my $past = $t - (60 * ONE_DAY); while (<DATA>) { chomp; if (/\d{2}\d{2}\d{4}/) { my $dir_date = Time::Piece->strptime($_, '%m%d%Y'); print "delete $_\n" if $past > $dir_date; } } __DATA__ 11012014 11132014 10092014 09092014 11112015 01012015 04012015 01042011 10122014
      #!perl use strict; use Time::Piece; use Time::Seconds; my $today = localtime; while (my $mdy = <DATA>){ chomp($mdy); my $dt = Time::Piece->strptime($mdy,"%m%d%Y"); my $age = int (($today - $dt) / ONE_DAY); print "$mdy $age\n"; } __DATA__ 11012014 11132014 10092014 09092014 11112015 01012015 04012015 01042011 10122014
      poj