Merge branch 'master' of https://github.com/adefaria/clearscm
[clearscm.git] / bin / bigfiles.pl
index ec9f2a2..a020f19 100755 (executable)
@@ -2,11 +2,11 @@
 ################################################################################
 #
 # File:         $RCSfile: bigfiles.pl,v $
-# Revision:    $Revision: 1.3 $
+# Revision:     $Revision: 1.3 $
 # Description:  Reports large files
 # Author:       Andrew@DeFaria.com
 # Created:      Mon May 24 09:09:24 PDT 1999
-# Modified:    $Date: 2011/04/18 05:15:29 $
+# Modified:     $Date: 2011/04/18 05:15:29 $
 # Language:     Perl
 #
 # (c) Copyright 2001, ClearSCM, Inc., all rights reserved
@@ -36,14 +36,16 @@ sub Usage {
 } # usage
 
 sub Bigfiles {
-  my $size     = shift;
-  my @dirs     = @_;
+  my $size = shift;
+  my @dirs = @_;
 
   my @files;
 
   foreach (@dirs) {
     next if !-d "$_";
-    my $cmd    = "find \"$_\" -xdev -type f -size +$size -exec ls -lLGQ {} \\;";
+
+    my $lsOpts  = $ARCHITECTURE eq 'solaris' ? '-loL' : '-lLG';
+    my $cmd    = "find \"$_\" -xdev -type f -size +$size -exec ls $lsOpts {} \\;";
     my @lines  = `$cmd`;
 
     foreach (@lines) {
@@ -51,11 +53,13 @@ sub Bigfiles {
 
       my %info;
 
-      if (/\S+\s+\d+\s+(\S+)\s+(\d+).*\"\.\/(.*)\"/) {
-       $info {user}    = $1;
-       $info {filesize}        = $2;
-       $info {filename}        = $3;
-       push @files, \%info;
+      #if (/\S+\s+\d+\s+(\S+)\s+(\d+).*\"\.\/(.*)\"/) {
+      if (/\S+\s+\d+\s+(\S+)\s+(\d+)\s+\S+\s+\S+\s+\d+\s+(.*)/) {
+        $info {user}     = $1;
+        $info {filesize} = $2;
+        $info {filename} = $3;
+
+        push @files, \%info;
       } # if
     } # foreach
   } # foreach
@@ -63,12 +67,14 @@ sub Bigfiles {
   return @files;
 } # Bigfiles
 
-my $lines              = defined $ENV {LINES} ? $ENV {LINES} :-24;
-my $top                        = $lines - 2;
-my $bytes_in_meg       = 1048576;
-my $block_size         = 512;
-my $size_in_meg                = 1;
-my %opts;
+my $lines        = $ENV{LINES} || 24;
+my $top          = $lines - 2;
+my $bytes_in_meg = 1048576;
+my $block_size   = 512;
+my $size_in_meg  = 1;
+my %opts = (
+  size => 1
+);
 
 my $result = GetOptions (
   \%opts,
@@ -79,22 +85,26 @@ my $result = GetOptions (
   'size=i',
 );
 
-my @dirs = @ARGV ? @ARGV : ".";
-
-my $size = $opts {size} ? $opts {size} * $bytes_in_meg / $block_size : 4096;
+my @dirs = @ARGV > 0 ? @ARGV : '.';
+my $size = $opts{size} ? $opts{size} * $bytes_in_meg / $block_size : 4096;
+my @files;
 
 # Now do the find
-verbose "Directory:\t$_"
-  foreach (@dirs);
-verbose "Size:\t\t$size_in_meg Meg ($size blocks)";
-verbose "Top:\t\t$top";
+verbose "Directory:\t@dirs";
+
+for (@dirs) {
+  verbose "Size:\t\t$opts{size} Meg ($size blocks)";
+  verbose "Top:\t\t$top";
 
-my $head = $top ? "cat" : "head -$top";
+  my $head = $top ? "cat" : "head -$top";
 
-my @files = Bigfiles $size, @dirs;
+  @files = Bigfiles $size, @dirs;
+} # for
 
-foreach (@files) {
+for (sort {$b->{filesize} <=> $a->{filesize}} @files) {
   my %info = %{$_};
 
+  last if $top-- == 0;
+
   print "${info {filesize}}\t${info {user}}\t${info {filename}}\n";
-} # foreach
+} # for