Using Perl and Unix Commands To Find Directory Sizes
Phil Tanny asked a question recently-
After mentioning there might be a handy Unix command to find total sizes of files in a directory, Phil did some research and provided good working examples for readers.
The examples not only show how to get file and directory sizes, they also show how to call Unix commands from within a Perl script. It's a great learning post.
I'll add just one thing, a method of adding up the total sizes of files when a list is returned by the Unix command.
When the command returns a list of files and sizes (instead of just a total size for a directory), the return is a list of lines, two tab-separated fields per line. The first field is the file size, the second the file or directory name.
The following snippet will calculate the total Perl module (*.pm) file sizes in the cgi-bin directory (change the path to the one for your server):
my $sizes = `du -sk /home/domain/public_html/cgi-bin/*.pm`; my $total = 0; for(split /[\r\n]+/,$sizes) # split on one or more newline characters { my($number,$file) = split /\t/,$_,2; # split on tab ($file not used here) $total += $number; } print 'Total: '.$total;
Will Bontrager