Looking in the source code of
coreutils, I found out that
total will always be displayed when using the
-l option on directories.
-d option to list entries instead of directory contents hides
total. But if you run that without arguments (or on a directory), it'll just show the directory and not its contents. Therefore, you need wildcards.
* matches all files and
.* matches hidden files as well (which corresponds with the
ls -ld * .*
As for the
-h option, it works for me. 1118360 bytes show up as 1.1M. Files smaller than 1024 show up in bytes.