http://qs321.pair.com?node_id=103595


in reply to Re: Aging Script
in thread Aging Script

Hi Ozzy..
I tried the example that you had given to me yesturday. I did have an error for the opt_h and opt_d.
I replaced the opt_h command with the opt_d command, now the script runs just fine. Though I know this is not the way you have made the script. I know the way I have changed it, is wrong. Could you please let me know what I can do!?! I know I need the opt_h because its the help command and opt_d is the days command. Please let me know as soon as you can. Thanx for your help!
~Seema

Replies are listed 'Best First'.
Re: Re: Re: Aging Script
by OzzyOsbourne (Chaplain) on Aug 10, 2001 at 17:28 UTC

    the 1st if statement here says if the user uses -h appended to the end of the script file, die an tell them how to run the command properly.

    the second part says: if it is not a number, die, otherwise set $agedays to $opt_d (the value of -d).

    Normally, I would run agecmd.pl -d90

    By switching the two, you have made the d option the help option, and made the -h option the number of days. By not specifying -d, $agedays is then set to 60 by default, giving you no problems.

    By taking things out, and changing the code, it's hard to know what happened. Does you have problems if you run the original code with no mods? Can you post your new code?

    if ($opt_h){ die "\agecmd.pl -d[days to age]\n"; } if ($opt_d){ if ($opt_d gt 9){ #tests for strings die "Error: days option must be a number. Use agecmd.pl -d[da +ys to age]\n"; }else{ $agedays=$opt_d; } }

    -OzzyOsbourne

      The only thing changed in the new code is the -h to -d. I still have to replace the path names..to find and delete the files on my PC.
      Here is the new code:
      #!/usr/local/bin/perl -w #Call Module use File::Find; use File::Copy; use Getopt::Std; getopts('d:h'); #Initialize Variables $server='server104'; $dirl='\\\\'."$server".'\\d$'; $agedays=60; #defaults agedays to 60 #Process arguments ([h]elp, [d]ays) if ($opt_d){ die "\agecmd.pl -d[days to age]\n"; } if ($opt_d){ if ($opt_d gt 9){ #tests for strings die "Error: days option must be a number. Use agecmd.pl -d[da +ys to age]\n"; } else{ $agedays=$opt_d; } } #Do date calculations @xtime=localtime(time); $day=$xtime[3]+1; $month=$xtime[4]+1; $year=$xtime[5]+1900; $hours=$xtime[2]; $mins=$xtime[1]; $secs=$xtime[0]; $logname='//server1/d$/'."ftp$month$day$year$hours$mins$secs".'.log'; $agesecs=60*60*24*$agedays; #converts $agedays to seconds $daysago=time-$agesecs; #the time stamp of $agedays ago in seco +nds $daysago2=localtime($daysago); #the time stamp of $agedays ago in w +ords - mainly for printing #Find the files (no dir) on the server print "finding files to be aged\.\.\.\n"; find(\$wanted, $dirl); sub wanted { $filesecs = (stat("$File::Find::dir/$_"))[9]; #Gets the 9th ele +ment of file stat - + # the modified time $filesecs2=localtime($filesecs); if ($filesecs<$daysago && -f){ #-f=regular files, eliminate + DIR p.367 push (@files,"$File::Find::dir/$_"); push (@files,"$filesecs2"); } print'.'; } #replace '/' with '\' in file names foreach (@files){ s/\//\\/g; } #Write to Log %filehash=@files; #puts the array into a hash for easy printing. Ke +y=file, Value=date open OUT, ">$logname" or die "Cannot open $OUT for write :$!"; print OUT "FTP server aging log generated by PERL script\n"; print OUT "Script written by Ozzy on 4/18/00\n"; print OUT "Files deleted from \\\\$server on ".localtime(time)."\n"; print OUT "Files deleted before $daysago2\n"; print OUT "Files were aged $agedays days\n\n"; print OUT "File Listing:\n\n"; foreach $filename (sort keys %filehash){ print OUT "filename $filehash{$filename}\n"; } close OUT; #Delete files print "\nDeleting all files before $daysago2"; #unlink $filehash; print "\nScript complete.";
      ~Seema

        With this code, you are looking for the d option twice. If you use the -d option (agecmd.pl -d90) at all, the code will die. Are you running the code with the d option? If not, you don't really need the whole getopt section. Do you have the Getopt::Std module installed?

        -OzzyOsbourne