Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

remove files from the V volume on windows server 2008

by fnicholas (Initiate)
on Aug 22, 2012 at 00:29 UTC ( [id://988906]=perlquestion: print w/replies, xml ) Need Help??

fnicholas has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks:

I am a newbie to Perl. I am currently a Systems Administrator in the Washington DC area.

Please I need your assistance. I need to complete the following for work function but i am still stuck on trying to complete the first part of the script below. I still can't get script to delete the files on the V volume on the Window Server.

Implement a script that checks for the available space on the V and X Volumes on a Window Server 2008 EE.

1. If the available space is less than 3.5 TB on the V Volume, the script deletes any SyscoDB database backup files older than 2 weeks.

2. If the available space is less than 3.5 TB on the V Volume, the scripts moves any SyscoDB database backup files older than 1 week to the X Volume.

#A script that check If the available space is less # than 3.5 TB on the V Volume, #and deletes any #SyscoDB database backup files older than 2 weeks. #!/usr/bin/perl use warnings; use strict; use Win32::DriveInfo; my $file; my $dir_to_process = "V:/Backups/SyscoDB"; my $V_TotalNumberOfFreeBytes = Win32::DriveInfo::DriveSpace('v:'); my $V_RoundedTotalNumberOfFreeGigabytes = sprintf("%.2f", ($V_TotalNumberOfFreeBytes/1073741824)); print "The Free Size is : $V_RoundedTotalNumberOfFreeGigabytes GB\n"; if ( $V_RoundedTotalNumberOfFreeGigabytes < 3.5 && $V_RoundedTotalNumberOfFreeGigabytes == 3.5) { opendir DH, $dir_to_process or die "Cannot open $dir_to_process: $!"; foreach $file (readdir DH){ unlink $file or warn "failed on $file: $!\n" if -M $file > 14; } closedir DH; }

Replies are listed 'Best First'.
Re: remove files from the V volume on windows server 2008
by Crackers2 (Parson) on Aug 22, 2012 at 00:50 UTC

    Two things. First:

    if ( $V_RoundedTotalNumberOfFreeGigabytes < 3.5 && $V_RoundedTotalNumberOfFreeGigabytes == 3.5) {

    seems wrong. It can't be both < 3.5 and == 3.5 at the same time. Maybe you want to simply say <= 3.5 ?

    Second, readdir returns just the filename. So on the unlink you probably want

    unlink $dir_to_process . "/" . $file
      Thanks for your help! I appreciate it.
Re: remove files from the V volume on windows
by BrowserUk (Patriarch) on Aug 22, 2012 at 00:34 UTC

    What error message do you get when the unlink fails?

    What output do you get if you change the unlink to:

    ## $^E is the extended system error message unlink $file or warn "failed on $file: $^E\n" if -M $file > 14;

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

    The start of some sanity?

      Error: The Free Size is : 2.5 GB failed on ..: The system cannot find the file specified Use of uninitialized value in numeric gt (>) at diskspace.pl line 24.

        So, basically the file you are trying to delete does not exist. Why do you think that is? (Hint: what do you see when you print $file within the loop?)

        Your problem is that readdir returns the names of the files; not their full paths, so what your code is trying to do is delete a filename read from a path on your V: drive, from your current directory.

        You need to combine the name returned from readdir, with the path you gave to opendir to get a full pathname.

        Something like this might work:

        ... foreach $file (readdir DH){ my $path = "$dir_to_process/$file"; unlink $path or warn "failed on $path: $!\n" if -M $path > 14; }

        And for future reference, investigate glob which makes doing this sort of thing much easier.


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

        The start of some sanity?

      What error message do you get when the unlink fails?
      ERROR: The Free Size is : 2.5 GB failed on .: failed on ..: Use of uninitialized value in numeric gt (>) at diskspace.pl line 24. failed on file1.txt: No such file or directory
      What output do you get if you change the unlink to:
      ## $^E is the extended system error message unlink $file or warn "failed on $file: $^E\n" if -M $file > 14;
      ERROR: The Free Size is : 2.5 GB failed on .: Access is denied failed on ..: The system cannot find the file specified Use of uninitialized value in numeric gt (>) at diskspace.pl line 24. failed on file1.txt: The system cannot find the file specified
        You should ignore (e.g. next if /^\.{1,2}$/) "." and ".." as they are pseudo-directories meaning "current directory" and "upper directory".
        Sorry if my advice was wrong.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://988906]
Approved by BrowserUk
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (4)
As of 2024-03-28 21:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found