#!/bin/sh
# -*- perl -*-
# This code allows us to start perl from our path or an environment variable
# rather than hardcoding a path into the #! line.  It works from sh or csh.
(exit $?0) && eval 'exec ${QPERLQ-perl} -x $0 ${1+"$@"}'
if (! $?QPERLQ) setenv QPERLQ perl
exec $QPERLQ -x $0 $argv:q

#!/usr/local/bin/perl -w
#
# $Id: du_one_level,v 1.7 1998/05/10 14:29:51 ejb Exp $
# $Source: /home/ejb/scripts/RCS/du_one_level,v $
# $Author: ejb $
#


$whoami = ($0 =~ m,([^/]*)$,) ? $1 : $0;

$| = 1;
$a = $b = "";			# prevent warnings
$trash = "";
@trash = ();
$xdev = 0;
if (defined($ARGV[0]) && ($ARGV[0] eq "-xdev"))
{
    $xdev = 1;
    shift(@ARGV);
    
}
$dir = $ARGV[0] || ".";
$dir =~ s,/$,,;
@dirs = ($dir);

$topdev = (stat($dir))[0];

#
# Do a breadth-first traversal of the filesystem counting up usage of
# files and putting directories on the stack.
#
while(@dirs)
{
    $dir = shift(@dirs);
    opendir(DIR, $dir);
    @entries = readdir(DIR);
    splice(@entries, 0, 2);	# kill . and ..
    @entries = sort { $a cmp $b } @entries;
    closedir(DIR);
    $totalsize = 0;
    for (@entries)
    {
	$file = "$dir/$_";
	if ((-d $file) && (! -l $file))
	{
	    $dev = (stat($file))[0];
	    if (! ($xdev && ($dev != $topdev)))
	    {
		push(@dirs, $file);
	    }
	}
	else
	{
	    @stat = lstat($file);
	    $size = (scalar(@stat) ? $stat[7] : 0);
	    $totalsize += $size;
	}
    }
    printf("%8d  $dir\n", $totalsize/1024);
}

sub usage {
    print STDERR "Usage: $whoami [-xdev] [dir]\n";
    exit 1;
}
