The Windows dir
directory listing command has a line at the end showing the total amount of space taken up by the files listed. For example, dir *.exe
shows all the .exe
files in the current directory, their sizes, and the sum total of their sizes. I'd love to have similar functionality with my dir
alias in bash, but I'm not sure exactly how to go about it.
Currently, I have alias dir='ls -FaGl'
in my .bash_profile
, showing
drwxr-x---+ 24 mattdmo 4096 Mar 14 16:35 ./
drwxr-x--x. 256 root 12288 Apr 8 21:29 ../
-rw------- 1 mattdmo 13795 Apr 4 17:52 .bash_history
-rw-r--r-- 1 mattdmo 18 May 10 2012 .bash_logout
-rw-r--r-- 1 mattdmo 395 Dec 9 17:33 .bash_profile
-rw-r--r-- 1 mattdmo 176 May 10 2012 .bash_profile~
-rw-r--r-- 1 mattdmo 411 Dec 9 17:33 .bashrc
-rw-r--r-- 1 mattdmo 124 May 10 2012 .bashrc~
drwx------ 2 mattdmo 4096 Mar 24 20:03 bin/
drwxrwxr-x 2 mattdmo 4096 Mar 11 16:29 download/
for example. Taking the answers from this question:
dir | awk '{ total += $4 }; END { print total }'
which gives me the total, but doesn't print the directory listing itself. Is there a way to alter this into a one-liner or shell script so I can pass any ls
arguments I want to dir
and get a full listing plus sum total? For example, I'd like to run dir -R *.jpg *.tif
to get the listing and total size of those file types in all subdirectories. Ideally, it would be great if I could get the size of each subdirectory, but this isn't essential.
Best Answer
The following function does most of what you're asking for:
... but it won't give you what you're asking for from
dir -R *.jpg *.tif
, because that's not howls -R
works. You might want to play around with thefind
utility for that.