http://qs1969.pair.com?node_id=169188


in reply to Using stat() to get the total size of files in a folder

Module-free version. In brief:
perl -le '$size += (-f $_ ? -s _ : 0) for (<*>); print $size'
Unnecessarily cryptic, sorry. (-f $filename) checks whether something is a plain file, as opposed to a socket, directory, link, or some other weird beast. The above is in a for loop, so $_ is each filename coming out of <*>. (-s $filename) gives the size. Except that we've already called stat() on the file, so we don't want to take the time to do it again, which is what the magic underscore filehandle is good for.

Finally, <*> does a pattern match on the current directory. You may prefer to say glob("*").

Readable version:

my $size = 0; for my $filename (glob("*")) { next unless -f $filename; $size += -s _; }

Replies are listed 'Best First'.
Re^2: Using stat()
by Anonymous Monk on Nov 25, 2011 at 09:34 UTC
    If the input location is some other directory (not the current directory) then what to put inside glob ?
        For Windows it will be glob "C:/" ?
        my $size = 0; for my $filename (glob("C:/")) { next unless -f $filename; $size += -s _; }