This program provides a new shell interface to the stat(2) information
normally provided by the Unix ls(1) program. This archive contains the
following files:
README - this file
sls.c - source
sls.1 - man page
Makefile - for make(1)
Type "make -f Makefile sls" to try it out; define $(BIN), $(MAN) and
type "make -f Makefile install" to install it. WARNING: this has been
compiled and tested only on a Sun 3 under SunOS 3.5 and on a Sun 386i
under SunOS 4.0. It has been run through lint and cleaned up. The
rest of this file is part of the man page (to stimulate your curiosity).
NAME
sls - list information about file(s) and directories
SYNOPSIS
sls [ -adlpsuLR ] filename ...
DESCRIPTION
Sls is a program designed to overcome the limitations of the
standard UNIX ls(1) program, providing a more consistent
interface to file inode information. It is particularly
designed for use by shell scripts to make obtaining informa-
tion about files easier. It uses printf(3)-style format
strings to control the sorting and output of file informa-
tion.
Advantages of sls over ls:
+ Allows complete specification of the output contents -
field (column) order, field widths, right/left justifica-
tion, and zero-fill.
+ Allows complete specification of the sort order indepen-
dently of the output options - output can be sorted on
one or more fields.
+ Has consistent, user-definable file date formats - ls's
are inconsistent and hard to parse (the seconds are never
displayed, the year is shown instead of the time for
files more than 6 months old, etc.).
+ Has ``normalized'' output (no summary lines or changing
formats).
+ Allows specification of delimiter char(s) - the charac-
ters between fields - which makes the output easier to
parse in shell scripts.
+ Won't stat files if it's not necessary (e.g., ``sls
<dir>''); in the trivial (but common) case of calling sls
on a directory (or list of directories) with no options,
it will simply read the directory file and display the
file names, sorted alphabetically. For very large direc-
tories, this is *much* faster than ls, and gets around com-
mand line limitations of the various login shells when
using echo(1).
EXAMPLES
To produce the same output as ``ls -l'' (differs slightly from
``sls -l'', in date format and filename display):
sls -u -p '%t%p %2l %-u %s %m %N'
To list the size (in kbytes), access and modify dates (no
times), and file names (no pathname), sorted by size (larg-
est first):
sls -s %-s -p '%sk %a"%h %d 19%y" %m"%h %d 19%y" %nb' /u/mydir
How a shell script might get the last-modify date on a file
with sls, vs. ls (assume that SLS DATEFMT="%h %d %H:%M"; remember
that you have no control over the time vs. year field with ls):
FILEDATE=`ls -l file | awk '{print $5,$6,$7}'`
FILEDATE=`sls -p %m file`
Feel free to send me bug and portability fixes, comments, and enhancements
(but watch out for "creeping featurism"). No flames, please - "You get
what you pay for."
Enjoy!
Rich Baughman rich@cfi.com OR ima!cfisun!rich
Price Waterhouse/CFI Waltham, MA 617-899-6500