Is there a way to force du to report a directory size (recursively) including only sizes of files?
Suppose I create a directory test/
, with two files (test/a
, test/b
) and an inner directory test/c
with a file test/c/d
, like this:
mkdir test
cd test
touch a
echo 1 > a
touch b
echo 1 > b
mkdir c
cd c
touch d
echo 1 > d
cd ../..
du test -ab
The output of the last line (running du
) is:
2 test/a
4096 test/c
2 test/b
8196 test
The size of the directory is 8196 (instead of 6, which would be: size of file a + size of file b + size of file c/d). This is because, as i understand it, du includes the size of directories themselves (because a directory is just a special file, which records file entries in it).
I don't want that. I want to see the combined size of all the files in a directory (the way Windows Explorer reports directory size). So in this example, the result should be:
2 test/a
2 test/c
2 test/b
6 test
More importantly, what I really want is that last line: the sum of sizes of all the files in the directory (recursively).
But I have gone through all the options of du, and there doesn't seem to be a way to do this. Is there any way?
$ ls -goR | awk '{sum += $3} END{print sum}'
16992
Edit. To exclude directories, use grep
$ ls -goR | grep -v ^d | awk '{sum += $3} END{print sum}'
6
If all you want is the size of the files, excluding the space the directories take up, you could do something like
$ find test/ -type f -print0 | xargs -0 du -scb | awk '/total/{k+=$1}END{print k" total"}'
6 total