Below another way to do it that doesn't use perl. But, even though
this solution appears to be shorter, it took me about five times as
long to come up with it. (I was trying to do a wc -c `find ...` for a
while. The problem with that is that there's a limit to the length of
a command. You can use xargs to avoid this limitation, but that'll
potentially run several wc commands, which is not what you want.)
I also tried constructing a really long expression 34343+234324+...+234324
and feeding it to bc, but unfortunately bc appears to (ahem) have line
length limitations. (Some enterprising person might take a look at this
problem, fix it, and submit a patch to the appropriate maintainers.)
--- fsizes.sh ---
#!/bin/sh
find $1 -type f -not -type l -printf '%s\n' | awk -- '{s += $0} END {print s}'
--- end fsizes.sh ---
Here's how to use it:
ocotillo:ptests$ ./fsizes.sh /usr/local
110960876