Initial add of defaria.com
[clearscm.git] / defaria.com / Computers / code / adm / bin / bigfiles
1 #!/bin/bash
2 ################################################################################
3 #
4 # File:         bigfiles
5 # Description:  Reports large files
6 # Parameters:   See usage
7 # Author:       Andrew@DeFaria.com
8 # Created:      Mon May 24 09:09:24 PDT 1999
9 # Modified:     <date> by Andrew@DeFaria.com
10 # Language:     Korn Shell
11 #
12 # (c) Copyright 2001, Andrew@DeFaria.com, all rights reserved
13 #
14 ################################################################################
15 me=$(basename $0)
16
17 function usage {
18   print "usage: $me: [ -verbose | -v ] [ -size | -s n ] [ <filesystem> ]"
19   print "\t\t[ -top n | -t n ] [ -notop | -not ]\n"
20   print "Where:"
21   print "  -size | -s n\tShow only files bigger then n Meg (default 1 Meg)"
22   print "  -verbose | -v\tTurn on verbose mode (default verbose off)"
23   print "  -top | -t n\tPrint out only the top n largest files (default LINES - 1)"
24   print "  -notop|not\tPrint out all files (default top LINES - 1)"
25   print "  <filesystems>\tFilesystems to check (default all hfs filesystems)"
26   exit
27 } # usage
28
29 filesystems=
30 verbose=off
31 integer top_n
32 lines=${LINES:-25}
33 let top_n=$lines-1
34 bytes_in_meg=1048576
35 block_size=512
36
37 # Now get parms
38 integer size_in_meg=1
39 integer size=$size_in_meg*$bytes_in_meg/$block_size
40
41 while [ $# -gt 0 ]; do
42   case "$1" in
43     -size|-s)
44       shift
45       size_in_meg=$1
46       # Convert size to 512 blocks
47       size=$size_in_meg*$bytes_in_meg/$block_size
48       shift
49       ;;
50
51     -usage)
52       usage
53       ;;
54
55     -top|-t)
56       shift
57       top_n=$1
58       shift
59       ;;
60
61     -notop|-not)
62       top_n=0
63       shift
64       ;;
65
66     -verbose|-v)
67       verbose=on
68       shift
69       ;;
70
71     -*)
72       print -u2 "$me: Error: Unknown option $1"
73       print
74       usage
75       ;;
76
77     *)
78       filesystems="$filesystems $1"
79       shift
80       ;;
81   esac
82 done
83
84 if [ "_$filesystems" = "_" ]; then
85   i=1
86   df -k -F ufs | while read line; do
87     if [ $i -gt 1 ]; then
88       filesystems="$filesystems $(echo $line | awk '{print $6}')"
89     fi
90     let i=$i+1
91   done
92 fi
93
94 # Now do the find
95 if [ $verbose = "on" ]; then
96   print "Filesystems:\t$filesystems"
97   print "Size:\t\t$size_in_meg Meg ($size blocks)"
98   print "Top:\t\t$top_n"
99 fi
100
101 if [ $top_n -eq 0 ]; then
102   head_cmd="cat"
103 else
104   head_cmd="head -$top_n"
105 fi
106
107 find $filesystems -xdev -size +$size -exec ls -l {} \; |\
108   sort +nr5 | awk '{ printf ("%.3f %s\t%s\n", $5/(1024*1024), $3, $9) }' |
109   $head_cmd