http://www.perlmonks.org?node_id=399514


in reply to Re: delete old files (windoze)
in thread delete old files (windoze)

I tried dir /s /p within the directory (not found) I'm beginning to suspect SPACES in file names..

Replies are listed 'Best First'.
Re^3: delete old files (windoze)
by kutsu (Priest) on Oct 15, 2004 at 14:57 UTC

    If you were in the TEMP directory and did a dir /s /p and found nothing...TEMP is empty, it has nothing to do with spaces in the filename. I would guess this works on your local machine because you don't clean out the TEMP directory, on a server (even a test server) this proably isn't the case and your files are getting deleted, which is one of the many reasons you shouldn't put non-temporary files in a temp directory. However, if you don't even understand the basic function dir (like how to find files with spaces in their names), I suggest you take some time and learn about your OS.

    "Cogito cogito ergo cogito sum - I think that I think, therefore I think that I am." Ambrose Bierce

      I guess I should have been MORE informative about my OS. Here's what I have. I have windoze 2003 ent and the hard drive is partitioned C:\ and T:\temp. I run Perl on both a 32bit and 64bit windoze servers.

      Now back to the problem at hand. Run this code if you have your hard drive partitioned and you will see it fail then get back with me with suggestions.
      #!/usr/bin/perl -w use strict; use File::Find; use File::stat; my $path = "T:\\"; find (\&wanted, $path); sub wanted { my $days = 10; my $stat = stat($_); # Access and Modified dates older then X days and not root if (-A $_ > $days && -M $_ > $days && !(/^\./) ){ # With a temp partition T:\ there are system files that can't +be deleted if (!($_ =~ /^ntldr.*|nprotect.*|ntdetect.*|System.*|VIRTPART. +*|.ini/i)) { printf "access date %s modify date %s File is %s\n", scala +r localtime $stat->atime, scalar localtime $stat->mtime, $_; # unlink($_); } } }

        I don't have a windows machine available, but I doubt it's because of the network drive (having done some copying, renaming, and deleteing on windows network drives). I would suggest you use a debugger and print $_ at the start of the while loop to ensure that the files found by File::Find match the files actually in the directory.

        "Cogito cogito ergo cogito sum - I think that I think, therefore I think that I am." Ambrose Bierce

      I think I've found the problem, the temp directory is a partition of the c:\ and File::Find is finding the directory System Volume Information which is a hidden folder on c:\, is there any way to make it not find it? thanks!

        You should proably start ask this question in a new thread, with a link to this thread, as many people might not look this far in the thread to see your new question. I don't know if there is a way to have File::Find skip hidden folder, don't acutally use it that much.

        "Cogito cogito ergo cogito sum - I think that I think, therefore I think that I am." Ambrose Bierce