If you find a large directory and most of the files are new, that directory may not be suitable for removal, as it is still being used. Here is a script that lists a summary of file sizes, broken down into the time of last modification. You may remember that ls -l will list the month, day, hour, and minute if the file is less than six months old and show the month, day, and year if the file is more than six months old. Using this, the script creates a summary for each of the last six months, as well as a summary for each year for files older than that:
xargs Section 28.17
#!/bin/sh # usage: age_files [directory ...] # lists size of files by age # # pick which version of ls you use # System V #LS="ls -ls" # Berkeley LS="ls -lsg" # find ${*:-.} -type f -print | xargs $LS | awk ' # argument 7 is the month; argument 9 is either hh:mm or yyyy # test if argument is hh:mm or yyyy format { if ($9 !~ /:/) { sz[$9]+=$1; } else { sz[$7]+=$1; } } END { for (i in sz) printf("%d\t%s\n", sz[i], i); }' | sort -nr
The program might generate results like this:
5715 1991 3434 1992 2929 1989 1738 Dec 1495 1990 1227 Jan 1119 Nov 953 Oct 61 Aug 40 Sep
[For the book's third edition, I thought about replacing this venerable ten-year-old script with one written in Perl. Perl, after all, lets you get at a file's inode information directly from the script, without the ls -awk kludge. But I changed my mind because this technique -- groveling through the output of ls -l with a "summarizing" filter script -- is really handy sometimes. -- JP]
-- BB
Copyright © 2003 O'Reilly & Associates. All rights reserved.