Issue
I'm trying to calculate the total size in bytes of all files (in a directory tree) matching a filename pattern just using the shell. This is what I have so far:
find -name *.undo -exec stat -c%s {} \; | awk '{total += $1} END {print total}'
Is there an easier way to do this? I feel like there should be a simple du or find switch that does this for me but I can't find one.
To be clear I want to total files matching a pattern anywhere under a directory tree which means
du -bs *.undo
won't work because it only matches the files in the current directory.
Solution
Try:
find . -name "*.undo" -ls | awk '{total += $7} END {print total}'
On my system the size of the file is the seventh field in the find -ls
output. If your find … -ls
output is different, adjust.
In this version, using the existing directory information (file size) and the built-in ls feature of find should be efficient, avoiding process creations or file i/o.
Answered By - tpgould Answer Checked By - Mildred Charles (WPSolving Admin)