Ok, so I chdir. The deal is that the subdir is based on the script looking at the most recent subdir.
Next month the "FEB 2009/Results %m-%d-%y" subdirs will be created under "RESULTS 2009". Now there will be "JAN 2009" and "FEB 2009" subdirs with "Results %m-%d-%y" subdirs.
#!/usr/bin/perl
use warnings;
use strict;
use File::stat;
use Time::localtime;
use File::Copy;
use File::Find;
use POSIX qw(strftime);
#=for
my $tm = localtime;
my $YEAR= $tm->year+1900;
my $MONTH = $tm->mon;
#my $subdir = strftime "Results %m-%d-%y", localtime;
#my $YEAR=year+1900;
#my $MONTH =
#my $YR_RESULT_dir = strftime "RESULTS $YEAR", localtime;
my $Month_YR_dir = strftime "$MONTH $YEAR", localtime;
my $newdir = '/home/mgavi/testdir1/$Month_YR_dir/';
print "$monthyr";
my $root='/home/mgavi/testdir1';
my $seqdir = "/home/mgavi/testdir2/SeqAssembly";
print "$YEAR $MONTH $root\n";
opendir (my $dh, $root);
chdir($newdir); # the new subdir to search
my @files=readdir $dh;
for my $f (@files){
my $mod_time=-M $monthyr."/".$f;
#skip unless modification date is less than one day ago
next if $f eq '.' || $f eq '..' || $mod_time > 1.0;
print $f,"\t",$mod_time,"\t",ctime(stat($newdir."/".$f)->mtime),"\
+n";
copy("$f","$seqdir");
}
closedir $dh;
I get
Usage: POSIX::strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) at dirtt.pl line 20.
when I run the script | [reply] [d/l] |
I get
Usage: POSIX::strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) at dirtt.pl line 20.
when I run the script
You get that error if you call strftime without enough argument.
| [reply] |
It's squawking about your strftime. In a new script, try just this:
use strict;
use warnings;
use POSIX qw(strftime);
my ($m, $y) = strftime ("%b %Y", localtime) =~ m|(\S+)\s(\S+)|;
print "$m $y";
That should get you further...
Update:
- For monthly cron's, you might want to cron on the first of the next month and simply get "yesterday's" date. That way you don't have to fight the 28th/29th/30th/31st thing in crontab. And it may save you from checking the files' mtimes, if the application will have begun writing to a new monthly directory. And if you don't mind backticking, GNU date has this slick feature: date --date '1 day ago' '+%b %Y'.
- You'll probably want to allow yourself to pass in the month and year, or default to the programmatic values. Backups have a way of needing a retro-run.
| [reply] [d/l] |