in reply to diskspace used by a directory

Are you trying to do this in Windows or in Unix? If Unix:
$dirsize = `du -ks /home`; $dirsize = (split " ", $dirsize)[0]; print "$dirsize\n\n";
On a Windows system of course it is a different matter.

Update: Thanks John for fleshing out the Windows angle.

Replies are listed 'Best First'.
Re: Re: diskspace used by a directory
by c (Hermit) on Jul 25, 2001 at 07:38 UTC
    Yes, I certainly could, but I was curious to know whether or not there was a perl module that I could use to do this, or another way without calling a shell function. If not, then this is probably the way I'll go.

    humbly -c

      Something worth considering:
      Tie         GBARR     Tie-Dir-1.02.tar.gz               2k  26 Apr 1996
      from CPAN would save you some steps. But I haven't actually used the module myself. Here's the internal docs:
      This module provides a method of reading directories using a hash. The keys of the hash are the directory entries and the values are a reference to an array which holds the result of C<stat> being called on the entry. The access and modification times of an entry can be changed by assign +ing to an element of the hash. If a single number is assigned then the acc +ess and modification times will both be set to the same value, alternative +ly the access and modification times may be set separetly by passing a reference to an array with 2 entries, the first being the access time and the second being the modification time. . . . . SYNOPSIS tie %hash, Tie::Dir, "."; new Tie::Dir \%hash, "."; $hash = new Tie::Dir "."; # itterate through the directory foreach $file ( keys %hash ) { ... } # Set the access and modification times (touch :-) $hash{SomeFile} = time; # Obtain stat information of a file @stat = @{$hash{SomeFile}}; # Check if entry exists if(exists $hash{SomeFile}) { ... } # Delete an entry delete $hash{SomeFile};
      I would be cautious when testing it out since it appears you could modify times/dates or even delete files with it.

      Good luck.
Re: Re: diskspace used by a directory
by John M. Dlugosz (Monsignor) on Jul 25, 2001 at 19:24 UTC
    On a Windows system, `dir /u $dirname` gives something like:
    Volume in drive F is Work Serial number is 244F:5AF9 Directory of F:\dev\experiment\ScanWord\* 366,148 bytes in 5 files and 2 dirs 393,216 bytes allocated 4,040,884,224 bytes free
    which can be parsed back in.

    That's what I get using the 4NT 4.00A command shell; with COMMAND.COM and CMD.EXE results and actual flags to dir may be different.

    In one application, I needed to know how much room a set of files would take up, before actually copying them to the target media (A CD-R). The filesystem of the staging area has different properties, so I couldn't just ask the filesystem, but had to compute it myself. Since I was already copying files over, it was easy to accumulate the size, rounding up to the sector size of the target.

    —John