Simplify Terminal directory listings

05.06.2009
As someone who spends a fair bit of time in Terminal, I'm always looking for handy timesaving Unix tips. A great source of such information is , a site where users contribute their favorite tips. Much of what you'll find there may not be directly applicable to OS X--as the site covers all versions of Unix and Linux--but a lot of it is.

After a command is submitted, other users can vote the submission up or down, based on how well they think it works. By focusing on the highly-rated submissions, you can quickly collect a good number of useful commands. To make this weeding-out process easier, commandlinefu.com has RSS and Twitter feeds for tips with a minimum of three "up" votes (, ) or ten "up" votes (, ). I use the 10-up Twitter feed, and it's a great way to only see the really popular submissions.

Today's 10-up Tweet featured a simple improvement to the ls -al command. This command lists all files in long format, and the output is quite verbose:

$ ls -l

total 0

drwx------@ 13 robg staff 442 Jun 5 09:23 Desktop

drwxr-xr-x@ 56 robg staff 1904 Jun 5 09:08 Documents

drwx------+ 128 robg staff 4352 Jun 5 04:53 Downloads

drwx------+ 73 robg staff 2482 Jun 3 10:43 Library

drwx------+ 13 robg staff 442 Mar 26 16:23 Movies

drwx------+ 8 robg staff 272 Jun 1 14:04 Music

etc...

But if you've got files with lengthy names, this output can get quite wide--and the thing you may be most interested in, the filename, will be a good distance off to the right. The is to use ls -hog instead. This "piggie" version of ls uses three modifiers to simplify the output. The h modifier converts file sizes to human-readable form (4.3K instead of 4352). The next two options work together to eliminate both the owner (robg) and the group (staff) from the output. When you use this version of the command, the output is much cleaner:

$ ls -hog

total 0

drwx------@ 13 442B Jun 5 09:29 Desktop

drwxr-xr-x@ 56 1.9K Jun 5 09:28 Documents

drwx------+ 129 4.3K Jun 5 09:28 Downloads

drwx------+ 73 2.4K Jun 3 10:43 Library

drwx------+ 13 442B Mar 26 16:23 Movies

drwx------+ 8 272B Jun 1 14:04 Music

etc...

Now there's only a bit of added information at the front--the permissions on the file, and the number of hard links (ln) to that file. If you'd rather not see those columns, you can send the output of ls to the cut command, which can trim columns from the output prior to display. In this case, the file size information starts at the 20th character, so the command (and its output) look like this:

$ ls -hog | cut -c 20-

442B Jun 5 09:34 Desktop

1.9K Jun 5 09:28 Documents

4.3K Jun 5 09:28 Downloads

2.4K Jun 3 10:43 Library

442B Mar 26 16:23 Movies

272B Jun 1 14:04 Music

etc...

Now the output from ls shows only the most basic information for each entry: size in human-readable form, time of last modification, and filename. As this little hint shows, there are many ways to do things on the Unix side of OS X. Following the tips on commandlinefu.com--and our occasional Terminal hints here on Macworld--is a good way to get more familiar with the Unix side of your Mac.