du alternative in perl


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting du alternative in perl
# 1  
du alternative in perl

I have a perl script that just does a `du -sk -x` and formats it to look groovy ( the argument can be a directory but usually is like /usr/local/* )

Code:
#!/usr/bin/perl

use strict;
use warnings;

my $sizes = `du -x -sk @ARGV | sort -n`;
my $total = 0;

print "MegaBytes Name\n";
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)
        my $number1 = sprintf ("%9.2f",$number / 1024);
        printf "$number1 $file\n";
        $total += $number;
}

printf ("TOTAL: %9.2f\n",$total / 1024);

The script works fine and does all that i want it to and i use it all the time, however is there an internal perl function that could replace the du -sk -x? I am just curious and would like to have a pure perl script with no shell options (primarily because the du options are not standard across the UNIX/Linux world). This is on a RHEL box just FYI. An external module might work too, if i can get them to let me install it.

Sean
# 2  
du depends heavily on stat - which is POSIX. So writing C code is failry portable,
along with the dirent.h functions

perl implements stat, so that's cake. The other needed calls: closedir, opendir, and readdir to get file names to stat. Both of those are in perl as well.... go for it.

Perl by Example has an example getting all the file names in a directory.

This does something else with stat data as entry-level example code for the forums here, but you can clean it up for your use:

Code:
#!/usr/bin/perl 
    use strict;
	sub numeric;
	sub to_date;
	my @filelist = ();
	my @sortarray = ();
	my $idx = 0;
	my $value = "";
	my $file = "";
	opendir(DIR, "..") || die "can't open $!\n";
	@filelist = readdir(DIR);
	closedir(DIR);

	$idx = 0;
	@sortarray = ();
	foreach $file ( @filelist )
	{
		$sortarray[$idx] = sprintf("%d %s", (stat "../$file")[9], $file);
		$idx++;
	}

	@filelist = sort numeric @sortarray ;
    print "@filelist\n";
	foreach $value ( @filelist )
	{
		print &to_date( $value );
	}

	sub numeric { my @one = split(' ', $a);
		          my @two = split(' ', $b); 
		          return $one[0] <=> $two[0];
		        }
	sub to_date {
		 my @months = ();
		 my $filename = "";
		 my $mtime = 0;
		 my $sec = 0; 
		 my $min = 0; 
		 my $hr = 0;
		 my $mday = 0; 
		 my $mon = 0; 
		 my $yr = 0; 
		 my $wday = 0; 
		 my $yday = 0; 
		 my $dntcare =0;
		 my $retval = "";
		 
		 @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);

         ($mtime, $filename) = split(' ', $_[0]);	     
	     ($sec, $min, $hr, $mday, $mon, $yr, $wday, $yday, $dntcare) =
	         localtime($mtime);
	     $retval = sprintf( "%-10s %3s %02d %4d %02d:%02d:%02d\n",
	         $filename, $months[$mon], $mday, $yr + 1900, $hr, $min, $sec );

         return $retval;
	}

Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #553
Difficulty: Medium
The standard input (stdin for short), standard output (stdout) and standard error (stderr) are three standard communication streams that are defined by most computer systems.
True or False?

10 More Discussions You Might Find Interesting

1. Cybersecurity

Alternative for chattr

Hello im working on "remover script" which try to remove "kthrotlds MINER VIRUS" in next part of my remover script i have to work on files that it destroyed, virus use chattr to open and lock files and replace them with malicious content im looking for a solution to remove chattr and disable... (9 Replies)
Discussion started by: nimafire
9 Replies

2. Shell Programming and Scripting

Converting shell to Perl I run into shell built in function trap and need alternative in Perl

I am working on converting shell to Perl script. In shell we have built in function trap Do you know alternative in Perl or actually we don't need it? Thanks for contribution (3 Replies)
Discussion started by: digioleg54
3 Replies

3. Shell Programming and Scripting

Getopts alternative

Hi, Does anyone have an example of parsing command line arguments similar to how getopts parse command line arguments? I am looking at a getopts alternative because I want to have the same parsing on the subroutine/function in the script. For example, I want to be able to do test.ksh -p 1... (4 Replies)
Discussion started by: newbie_01
4 Replies

4. Solaris

vi alternative

Is there any other editor, installed by 'default' in Sparc Solaris10, besides vi? I'd like to avoid installing anything new. If not, how to make vi more user-friendly? thanks. (8 Replies)
Discussion started by: orange47
8 Replies

5. Shell Programming and Scripting

Alternative for wc -l

Hi techies .. This is my first posting hr .. Am facing a serious performance problem in counting the number of lines in the file. The input files i get will be in some 10 to 15 Gb of size or even sometimes more ..and I will load it to db I have used wc -l to confirm whether the loader... (14 Replies)
Discussion started by: rajesh_2383
14 Replies

6. HP-UX

alternative for egrep -o on HP-UX

Hello to all board members!! I have a problem on a HP-UX system. I should write a script. Therefore I need to search after IP addresses in the output of a command. On Debian this works: ifconfig | egrep -o "{1,3}\.{1,3}\.{1,3}\.{1,3}" The script where i need this is not ifconfig, but... (2 Replies)
Discussion started by: vostro
2 Replies

7. IP Networking

Alternative to Port 25

We're in the process of testing a mail server that we hope will replace our current one that's being hosted by our ISP. We learned a few things along the way and would like to avoid them if possible. The biggest hurdle is getting around port 25 (SMTP). Our work force is approx 75% consultants who... (1 Reply)
Discussion started by: sdotsen
1 Replies

8. Shell Programming and Scripting

getopts alternative?

I have to implement switches (options) like this in my script. ./myscript -help ./myscript -dir /home/krish -all ./myscript -all getopts allows switches to have one character (like a, b, etc.). How can I customize it for handling the above situation? Or, is there any alternative to... (3 Replies)
Discussion started by: krishmaths
3 Replies

9. Shell Programming and Scripting

alternative for Archieve

Hi all , In order to zip the file ... first we need to use TAR and then GZIP on the TAR file ..... Is there any other method for zipping the files directly as in windows ( winzip ) Regards, Dhananjay (3 Replies)
Discussion started by: dhananjayk
3 Replies

10. UNIX for Dummies Questions & Answers

sendmail alternative

Hi, I'm looking for a sendmail alternative. In an effort to comply with HIPAA regulations, our company launched a campaign to identify and replace insecure software and sendmail was one of them. We use sendmail in many of our maintenance/monitoring scripts and would like to keep the same... (4 Replies)
Discussion started by: tavaresd
4 Replies

Featured Tech Videos