On Jun 22, 1:29am, Kevin Buettner wrote:
> Below another way to do it that doesn't use perl.
[...]
> find $1 -type f -not -type l -printf '%s\n' | awk -- '{s += $0} END {print s}'
Okay, I'm wasting way too much time on this, but I couldn't very well
submit a twenty-three line perl solution and what amounts to find+awk
one liner and leave it at that. Newbies out there might get the wrong
idea and start writing shell scripts instead of perl scripts!
So here's another shell script which is very similar to fsizes.sh, but
uses a perl one-liner to do the job of both find and awk in that other
script.
--- fsizes2.sh ---
#!/bin/sh
if [ -z "$1" ]; then
echo "usage $0 root-dir"
exit 1
fi
perl -MFile::Find -e 'find sub {$s += -s if -f && !-l}, @ARGV; print "$s\n"' $1
--- end fsizes2.sh ---
And here's the equivalent code in pure perl...
--- fsizes2.pl ---
#!/usr/bin/perl -w
use File::Find;
die "Usage $0 root-dir\n" unless defined $ARGV[0];
find sub { $s += -s if (-f && !-l)}, $ARGV[0];
print "$s\n";
--- end fsizes2.pl ---
I'd be curious to see what a Python solution looks like.