I had a problem. My home directory is huge – 9 gigs – but I don’t know what’s taking up all that room. My porn stash is on another partition where my wife doesn’t know to look, so something is taking up a lot of room and I want to know what and why.
Oh yeah, I know how to check the size of a directory – use du (
'du -sh .') for the usage of current directory (including all sub directories). And, to see the size for every individual directory in the current directory,
'du -sh *'. Easy peasy.
But that didn’t tell me what I needed to know, since the total size of all visible directories was less than a quarter of the used space. That’s where hidden directories come into play.
Now, in the unix world, there isn’t a special file permission to hide a file or directory. You just name it with a leading dot, like
'.my_hidden_stuff', and most utilities won’t display it. There’s nothing intrinsically hidden about it, though. You can view them easily enough, e.g.
'ls -a' will show everything, including the “hidden” stuff.
What if you want to see just the hidden stuff? It’s not as simple as saying
'ls -a .*', since that includes
'.' (the current directory) and
'..' (the parent directory), too. Some utilities, like
du, will then combine arguments with a common root, which means you get the summary for the current directory, but none of the hidden files broken out.
In bash, at least, you can include simple regular expressions on the command line. (Remember, in unix, your command line is pre-processed by the shell (bash, csh, tcsh, etc.) and the expanded items are given to the program. DOS/Windows, by contrast, the expansion and processing is the responsibility of the program and command.com (or cmd.exe) does little processing itself.
The regex for all dot files, minus ‘.’ and ‘..’, is
'.[^.]*' (which basically says, “start with a dot, and the next character must exist but cannot be a dot, and then anything goes after that”).
So, my command to see how much space each of my hidden directories are using, is
du -shx .[^.]*