1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
sl
sl takes the most common use of Unix ls, to display the files in a directory
compactly in multiple columns, and makes it substantially more useful.
sl groups files by purpose so you can mentally organize many files quickly; for
instance, it collects HTML and PHP files together, as opposed to leaving them
mixed up with supporting images, CSS, and JavaScript. sl points out interesting
files, which include those that have been recently modified, read relatively
recently, are relatively large, have warnings, or need to be checked in to or
out of version control.
sl is also aesthetically pleasing due to attention to layout and filtering as
well as limiting color and text annotations to salient information.
----------------------------------------------------------------------------
Screen Shots
ls vs sl on WWW site:
sl on a software development directory:
sl on a collection (photos, audio, video, even apps):
On this directory of music, which is managed by iTunes, we see all the albums by
an artist. sl also shows /number of songs in each album, the relatively recent
CD rips (which not coincidentally correspond to the latest two albums), which we
ripped about 2 months ago (58 days) and 7 months ago (228 days). The summary
line at bottom shows the total number of CDs and the (total number) of songs.
Note that the directories were determined to hold audio material, and sorting
works as it should with inital "The"s ignored. This display is useful for other
kinds of hierarchy.
Features
* sort
* group by purpose to organize and make understandable so many files
(like Apple II catalog arrangers, but automatically)
For subdirectories, look at the files they contain and if warranted
reclassify directory into image, audio, or video group.
* normalize: fold case for most groups (rather than all files starting
with an uppercase letter followed by all lowercase files), ignore
initial the/an/a, treat various word separators (space . _ -) as
equivalent
* numbers ordered properly (8.jpg before 10.jpg — no need for leading 0s
just for sorting)
* mark
* important (highlight in inverse colors)
* autosearch for keywords, such as "urgent" or "password"
* quickly see what's new by looking at recently changed files (think red
hot)
or recent relative to other files in that directory (think once hot now
still glowing orange)
* → files read relatively recently. The file you worked with more
recently than the others is often the one you're looking for now.
* large files relative to other files in that directory (indent by a
space — easy to pick out against column edge)
e.g., largest fonts may have CJK or extensive Unicode, largest among
source code may be site of heavy lifting, in directory of directories
call out ones with most files
* classification by trailing character (like ls -F): directory/, link->,
executable*, special_
* colorize directory, executable*, special (like ls -G, though more
subtle since have groupings and warnings)
* info
* spot info: brief, particularly relevant additional information on a
highly limited number of files. Since few files are targeted, this is
fast and avoids visual clutter. Standard spot info details the recently
read (-age), recently changed (<age, with < implying it may be earlier
if a download or sloppy copy reset the last modified time), and
relatively large (size-in-bytes). Per-file customizations can display,
for example, latest build time and build number next to Ant build.xml,
count of critical bugs filed against source code file, number of lines
in TODO list, warning if HTML has not been validated, you name it.
* /number of files in subdirectories, which can be a useful if rough
survey (this is not slow)
e.g., only 2 files, 1000 files, TOSORT/27, tests/27, Yosemite 2007
photos/316 vs Detroit photos/2
* summary line with counts and totals. Includes a count of .dotfiles,
which are rare outside of the home directory.
* filter
* ignore clutter: Emacs auto backup (like GNU ls -B), generated (Java
.class, C .o), C .h, Macintosh Desktop DB, TAGS
* identify series (like audiobook ch 01.mp3 ... audiobook ch 27.mp3) and
condense to first one plus count
e.g., DSC00423.jpg, DSC00424.jpg, DSC00427.jpg ... DSC01072.jpg ⇒
DSC00423.jpg...227. Also look at /dev.
* elision of shared prefixes reduces the amount of text to read and
implicitly clusters similar files. Here's one spectacular application.
* distill: If you are already familiar with a directory or it is very
large, use the -only command-line option to distill the listing to only
distinctive files. A file is considered distinctive if it's: recently
changed, recently read, a warning, or spot info. sl -only on /usr/bin
and OS X /Library/Fonts can be interesting.
* layout
* column widths tailored to what's needed by individual columns (as
opposed to uniform width by ls dictated by the single longest filename
in the directory), giving a more natural appearance and freeing space
for more columns
* if group title would be at bottom of column, bump to top of next column
if room
* shorten very f...ing long names if necessary to achieve multiple
columns. Shortened names retain the first characters of the file, file
suffix, and the first number which is usually a series number or year
or video resolution (1080p).
* warnings
* broken link X (base file moved, renamed, or deleted): symlink, ~ file
from Emacs backup or CVS previous version
* not readable by current user
* directory Writable by public
* directory not searchable/enterable (executable permission not set) by
current user
* peculiar permissions: owner can't read, group or public can write or
execute but not read, or owner has less permission than group or
public. For example, a dropbox directory may display permissions
rwx-wx-wx
* special permission bits: setuid, setgid, sticky. These are not errors,
but something to be aware of.
* file 0-length or directory is empty, directory contains only 1 file
(Strunk and White: "omit needless hierarchy")
* file has 2 or more ← hard links. Under normal conditions, a file has
exactly 1 (from its parent directory).
* file changed vis-a-vis version control: either local copy has been
edited and needs to be uploaded^ to repository, or another worker
updated the repository rendering the local copy stale and in need of
downloadingv (stale files checked only in local repositories, not
remote servers, for performance). Support for RCS and CVS is built in,
and you can customize to add support for others.
sl does not replace ls. Use ls to see all files and full metadata.
Software
for OS X, Solaris, Unix, and GNU/Linux
Licensed under the GNU Public License version 3. NO WARRANTY.
Install:
1. Download software, probably to /usr/local/bin or ~/bin.
* v1.1.2 of February 16. Support filenames that are not UTF-8 and not
ASCII (thanks Christian Neukirchen).
* v1.1 of February 12. Support file sizes larger than 4GB on 32-bit
systems (thanks Giuseppe Merigo), tightened tolerances, new feature:
autosearch.
* v1.0 of January 26, 2012
2. From the command line:
chmod +x download-dir/sl
unalias sl
rehash
3. Install Tcl, if needed (which tclsh comes up empty). Install into
/usr/local/bin or change the first line of the sl script. Tcl is already
installed in OS X.
Use: Now more-useful listings are as convenient to type as the usual ls.
sl directory-path
Convenience: Automatically see an overview and interesting files when switching
to a new directory:
alias cd 'cd \!*; sl'
alias pd 'pushd \!*; sl'
alias pdo 'pushd \!*; sl -only'
Customization
Customization is done via a startup file, at the path ~/.sl.tcl. You can control
colors, new suffixes, localization of the most used text, switches that control
system operation, and even exactly what is shown for every file. For example,
here's a custom color scheme that makes files and directories brighter and
blends the text annotations into the background.
The startup file is executed as Tcl code, so you can implement substantial
changes, such as adding support for another version control system. Rather than
hacking the source code, it is better to put customizations in the startup file
so that you can easily update to new versions without reapplying your hacks. Tcl
lets you go so far as redefining whole procedures, so any change you want can be
done in the startup file.
* .sl.tcl sample startup file, download to your home directory. It shows how
to make many of the most likely changes, as well as how to turn on features
that are too mind blowing to be the default settings, including prefix and
suffix elision.
Support
Troubleshooting:
* If you see lots of garbage that looks like ^[[31m, enable color for your
terminal or turn off color in your startup file.
* To change colors or bold on OS X, use Terminal's Preferences. Be sure to
pick a font that has a bold variation, such as Menlo.
* To view color output with less, set the LESS environment variable to include
--RAW-CONTROL-CHARS.
* Error reported no such file or directory, but file definitely exists. If you
have a legacy filesystem with filenames that are not encoded in Unicode
UTF-8 (or ASCII, which is a subset of UTF-8), you should migrate the names
to UTF-8 with a tool such as convmv. sl tries to handle this situation, but
for paths passed to it on the command line it is already too late.
* Previously, transposing the letters of ls was a misspelling. In some
systems, it resulted in a Command not found error. Some shells prepared for
this and aliased the transposition and other misspellings to in effect
autocorrect to what the user meant to type. If the output still looks like
ls, it's probably an alias. You can unalias in open terminals and take out
the line in the shell startup file. In another case, a Linux distribution
surprised you with ASCII art of a train. You can delete it, or if an ASCII
train is a key part of your problem-solving toolkit you can rename it.
Known bugs:
* On OS X, the Spotlight search engine indexes the contents of files. As a
side effect of reading the content of a file, the file system updates the
file's last accessed time (atime). Because Spotlight is continuously
indexing, often within seconds of a file being changed, almost all files
have very recent atimes. For sl, this makes the atime useless for showing
recently accessed files: because everybody's special, nobody's special.
Spotlight should consider its work to be stealthy and reset the atime.
* Some file systems do not update atime, which is used to determine recently
read files.
Send suggestions and bug reports to
----------------------------------------------------------------------------
Invented by Tom Phelps on December 30, 2011.
|