diff options
author | Jim Meyering <meyering@redhat.com> | 2011-05-11 17:13:53 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2011-05-13 18:28:43 +0200 |
commit | a085b6fc6c8fa03dac20f01f2f2b64b50b8bdf66 (patch) | |
tree | 817f262f34c1aa38bbf703b7d627a4266e48b755 /doc | |
parent | 6bc73ee56ee525b30053cf7ec06215ef39f9e8de (diff) | |
download | coreutils-a085b6fc6c8fa03dac20f01f2f2b64b50b8bdf66.tar.xz |
ls: allow stat-free use of --color
Even on a system with d_type support, the default use of --color
makes ls stat every file in order to be able to honor settings like
EXEC, STICKY, ORPHAN, SETUID, etc., because those settings require
information that is not provided by dirent.d_type. However, if
for a potentially large performance gain, you are willing to disable
those settings, you can now make ls --color give type-related coloring
and perform no stat calls at all (other than the unavoidable call-per-
command-line argument). Before this change, even with all of those
attributes disabled, ls --color would still stat every directory.
Now, we're down to the minimum of one stat call per command-line arg.
* src/ls.c (gobble_file): With --color, don't stat a
non-command-line-specified directory when no directory-coloring
attribute is enabled.
* tests/init.cfg (require_dirent_d_type_): New function.
* tests/d_type-check: New script, mostly from Pádraig Brady.
* tests/Makefile.am (EXTRA_DIST): Add it.
* tests/ls/stat-free-color: New test.
* tests/Makefile.am (TESTS): Add it.
* doc/coreutils.texi (General output formatting): Describe how
to use dircolors to make ls --color refrain from calling stat
on a d_type-enabled file system.
Prompted by a query from Josef Bacik.
Diffstat (limited to 'doc')
-rw-r--r-- | doc/coreutils.texi | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/doc/coreutils.texi b/doc/coreutils.texi index 457ecabb2..b77d8dfda 100644 --- a/doc/coreutils.texi +++ b/doc/coreutils.texi @@ -7042,6 +7042,23 @@ Piping a colorized listing through a pager like @command{more} or @command{less} usually produces unreadable results. However, using @code{more -f} does seem to work. +@vindex LS_COLORS +@vindex SHELL @r{environment variable, and color} +Note that using the @option{--color} option may incur a noticeable +performance penalty when run in a directory with very many entries, +because the default settings require that @command{ls} @code{stat} every +single file it lists. +However, if you would like most of the file-type coloring +but can live without the other coloring options (e.g., +executable, orphan, sticky, other-writable, capability), use +@command{dircolors} to set the @env{LS_COLORS} environment variable like this, +@example +eval $(dircolors -p | perl -pe \ + 's/^((CAP|S[ET]|O[TR]|M|E)\w+).*/$1 00/' | dircolors -) +@end example +and on a @code{dirent.d_type}-capable file system, @command{ls} +will perform only one @code{stat} call per command line argument. + @item -F @itemx --classify @itemx --indicator-style=classify |