sls: Super ls with Format You Can Choose

The ls -l command, and related commands like stat (), give lots of information about a file (more exactly, about a file's inode ()). The information is printed in a way that's (sort of) nice to look at. But the format might not be exactly what you want. That format can be tough for shell developers to use: parsing the output with sed, awk, and others is tricky and a pain (article has an example). Finally, the ls -l output is different on BSD and System V systems.

sls The sls command solves those problems and more. It lets you:

And there's much more.

The manual page on the disc explains sls formatting in detail. Here are a few examples. Let's start with the style of ls -l output that has fixed-width columns and doesn't show group ownership. (The default sls -l is similar, but its date format doesn't change after six months and it doesn't have the total line.)

% ls -l total 3 -rw-r----- 1 jerry 1641 Feb 29 1992 afile lrwxrwxrwx 1 jerry 8 Nov 18 00:38 bfile -> ../bfile

Here's a more user-friendly format for people who aren't UNIX hackers (it might be best to put this into an alias or shell function ()). The date and time are shown, followed by the owner's name, the size in kbytes, and the filename without the symbolic link information like -> ../bfile:

% sls -p '%m"%F %d, 19%y %r" %u %4skK %n' February 29, 1992 03:43:00 PM jerry 2K afile November 18, 1992 00:38:22 AM jerry 1K bfile

How about a simple ls output that shows all three file dates (): modification, access, and inode change? We'll use echo () to print a title first:

% echo 'modify access inode'; \ sls -p '%m"%D" %a"%D" %c"%D" %n' modify access inode 02/29/92 09/17/92 11/18/92 afile 11/18/92 11/18/92 11/18/92 bfile

Finally, let's ask sls to make a set of UNIX commands that could be used at the end of a shell archive () file. These commands would recreate the modes, date and owner (with a numeric UID) as the files are extracted from the archive:

touch 
% sls -p 'chmod %P %n; chown %U %n; touch %m"%m%d%H%M%y" %n' chmod 640 afile; chown 225 afile; touch 0229154392 afile chmod 777 bfile; chown 225 bfile; touch 1118003892 bfile

I didn't show the sorting options or many of the other output format characters. But I hope I've given you an idea (or ten).

- JP