Softpanorama
May the source be with you, but remember the KISS principle ;-)

Contents Bulletin Scripting in shell and Perl Network troubleshooting History Humor

ls command and (dis)coloring of directory listings

News Shells Recommended Links Options Examples Unix cd command Strange Files Deletion and Renaming in Shell
Annoying colors on Linux command dircolors Command completion find grep tee Pipes
Midnight Commander version 4.8 dirname tree du diff basename dircmp
xargs env command eval command Horror Stories Bash Tips and Tricks Humor Etc


creeping featurism
: /kree?ping fee?chr?izm/, n.
[common]
1. Describes a systematic tendency to load more chrome and features onto systems at the expense of whatever elegance they may have possessed when originally designed. See also feeping creaturism. “You know, the main problem with BSD Unix has always been creeping featurism.”
2. More generally, the tendency for anything complicated to become even more complicated because people keep saying “Gee, it would be even better if it had this feature too”. (See feature.) The result is usually a patchwork because it grew one ad-hoc step at a time, rather than being planned. Planning is a lot of work, but it's easy to add just one extra little feature to help someone ... and then another ... and another.... When creeping featurism gets out of hand, it's like a cancer. The GNU hello program, intended to illustrate GNU command-line switch and coding conventions, is also a wonderful parody of creeping featurism; the distribution changelog is particularly funny. Usually this term is used to describe computer programs, but it could also be said of the federal government, the IRS 1040 form, and new cars. A similar phenomenon sometimes afflicts conscious redesigns; see second-system effect. See also creeping elegance.

Introduction

The vast majority of UNIX commands manipulate files and directories. The basic command to list files and directories is ls.  One interesting feature of ls is very few syadmins know how to use it. To say nothing about regular user. This kind of "cognitive blindness" is connected with the overcomplexity of Unix, where each command has dozen or more swtched and meaning f switches changes from one command to another.

Linux uses the ls command from the GNU fileutils  project and has many special switches and features ls has switches that affect how the files are listed, including the level of detail, the sorting order, and the number of columns.

Often ls is preceded by cd command. Since bash 4.0 if you set option autocd (by default it is off):

shopt -s autocd

In this case you can type the name of directory without prefixing it with it cd. If you name directories with the first upper case letter that can save you a lot keystrokes.

You can also use command completion with ls as well as history of commands.  That can save some typing.  Of cause using Midnight Commander  or similar file manager is a better way of solving  this problem, but that requires learning of an additional software product.

Most Linux distributions set up certain defaults for ls command and provides coloring of directory listings. Which can be completely screwed on the background you prefer. 

By default ls hides files that begin with a period. This is the Linux convention for configuration files, history files, and other files that a user isn't normally interested in. To see these files, use the -A (all) switch. Use -a (absolutely all) to show the implicit . and .. files as well.

ls -A 

On all modern distribution  filenames are printed in color, which different colors suppsely shoing the typr od the file (archive, directory, executatble file -- all rended indiffrent color). But the designed forfot that there is such sthing as too much zeal.  Often colors are screwed up, especially if you prefer non back backgound for your terminal window.

In this case you copy to you dire3ctory and edit the file /etc/DIR_COLORS,which defines the lcolors.  The format of the file is described iinside the file. Then you need to modify you .bash_profile to "source" this file.

Alternatively you can display the files without color and with symbols instead. In order to do it redefined ls  and ll aliases using the --color and --classify (or -F) switches. (On most Linux distributions, this feature is turned on using aliases.). For example:

$ alias ls="/bin/ls -F --color=never"

to turn colors off one time you can simply type /bin/ls -- that will evoke actual program, not the alias and it displays listing without any colors.

The option -F (--classify ) marks in special way directories (/), programs (*), symbolic links (@), pipes (|), and Unix domain socket files (=). These symbols are not a part of the name: They are alternative to colors hints as to the type of file. 

Another useful switch is --hide-control-chars (or -q). Linux filenames can contain any character, even control characters. It is possible to create a filename with hidden characters in the name. In these cases, you can't rename or delete the file unless you know what the hidden characters are. Contrary to what the name implies, the --hide-control-chars switch displays any unprintable characters in the filename as question marks, making their locations visible. See  Strange Files Deletion and Renaming in Shell for details.

$ rm orders.txt
rm: orders.txt non-existent
$ ls --color=never --classify -hide-control-chars o*
orde?rs.txt

The way ls command displays file and directory names depends on what version of UNIX you are using and the ls command-line options used as well as whether output is directed to  terminal or file/pipe. In other word, the default output of ls is device sensitive. If you use the  default ls command to a pipe each filename into other program, then each filename  is separated by the newline. On console the default is multicolumn output.

Each argument to the ls command is either the name of a file, the name of a directory, or one or more options. The options are used to control the ordering of the list of files and information that is printed for each file. For each file argument, the requested information is printed. For each directory argument the requested information is printed for all the files in the directory (unless the -d option is used).

 Some important options:

See also Strange Files Deletion and Renaming in Shell

LS aiases, such as ll

Alias ll is probably the most common alias in Unix and linux. It can be defined in many different ways. here is one, that I would recommend:

alias ll=’/bin/ls -hAlF --group-directories-first’ # F will show * after executables, / after directories and @ after links.

Actually unending games with ls aliases is an interesting story in itself. See Examples of .bashrc files for examples.

Reading various webpages pages on the topic I was surprised that there how many of "my aliases" were present in other people .bash_profile or .bashrc files :-). Looks like there is some common "core" of aliases that that many people independently reinvent again and again.

Eliminating annoying colors in ls command

In GNU implementation you can control the colors of files and directories using dircolors  utility. And that' probably the most annoying problem with ls in linux.

Using color to distinguish file types is disabled both by default and with --color=never. With

 --color=auto,
ls emits color codes only when standard output is connected to a terminal. The LS_COLORS environment variable can change the settings. Use the dircolors command to set it. See  Annoing colors on Linux command

The Linux colorizing of directories demonstrates classic case of "too much zeal". It is bad on light backgrounds .Specifically the color-coding of symbolic links tend to show in such a light color that it is often impossible to read. There are problems with using it on classic dark blue of black backgrounds too.

You can disable command line colorizing by editing /etc/DIR_COLORS and changing "COLOR tty" to "COLOR none" or (less drastically) by removing the "TERM ansi" line from the same file (which removes colorization for ansi but doesn't affect console use).

The color output can also be blocked by adding the  --color=none, or --color=tty   to the aliases of ls  and ll command.

alias ls='ls --color=none'

you can do it in  /etc/profile) and allow users to set coloring in their own profile if preferred. 

or you put in default user profile (and profiles of all existing users) the unalias command:

unalias ls

Modification of In the file /etc/DIR_COLORS is a little bit more involved but doable. See dircolors. Find each offending line and replace it with more sane line. Use the following table for find offending colors

ISO 6429 color sequences are composed of sequences of numbers separated by semicolons. The most common codes are:

 0     to restore default color
 1     for brighter colors 
 4     for underlined text
 5     for flashing text
30     for black foreground
31     for red foreground
32     for green foreground
33     for yellow (or brown) foreground
34     for blue foreground
35     for purple foreground
36     for cyan foreground
37     for white (or gray) foreground
40     for black background
41     for red background
42     for green background
43     for yellow (or brown) background
44     for blue background
45     for purple background
46     for cyan background
47     for white (or gray) background

For for example find the the line that has color attributes   34;42 (blue foreground, green background)

OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky 

As the first step all color attributes for those lines can be changes to 1;30 (black):

OTHER_WRITABLE 30;1 # dir that is other-writable (o+w) and not sticky 

Listing recently modified files, option -t

There are several popular options such as -l and -a that everybody knows. Slight less known option is -t which lists the files reverse sorted according to each file's modification date. The most recently modified files are printed first.

ls -lt | head -4 | tail -3  # last three modified files in the current directory

Listing directories: ls implementation SNAFU

Option -d is actually one of the most tricky options of ls command. Expectations ( and documentation leaves much to be desired).

It behavior is a mystery and generally to use directories you should find instead.

find . -type d -ls

It should work like option   -type d in find, but it does not. 

Few sysadmins understand how it works, although many tried to use (unsuccessfully) this option. My impression is that it is just replica of  incorrectly implemented prototype used by GNU coders (probably Solaris of FreeBSD ls) and nobody has the courage to correct this error.

Option -d should force ls to print only the requested information for a directory and not its contents.

But in GNU implementation (as well as most other implementation) if you specify wildcard such as *, not only all  the directories implicitly named in the argument list are lists, but also  files in those directory are printed.

So if you think that ls -d * will provide you list of directories in the current directory, you are deeply mistaken ;-). It will display both directories and files in the current directory and each of subdirectories too, so the necessary effect can be achieved only by using:

ls -d * | grep ':' | cut -d ':' -f 1

Or you can create an alias

alias ldir="ls -l | egrep '^d'"

This alias ldir works correctly and really lists directories in the current directory in the long format.

Also  ls -d gives you the following result, which I consider a bug

$ ls -d
.

This is kind of idiotic, but that how it was implemented many many years ago in Unix and newer implementation like GNU ls preserved this compatibility.

At the same time commands
cd /usr/bin
ls -d ../*

works correctly. Try to guess why ;-)

The only way to get logical output from option -d is to use trailing slash after asterisk or other basic regular expression. As in: 

ls -d */
The only way to get logical output from option -d is to use trailing slash after asterisk or other basic regular expression. As in:
ls -d */

My advice is to use find instead. To list all directories in the current you can use:

find . -maxdepth 1 -type -d
To list all directories in the current tree you can use:
find . -type d -ls
Here is interesting (but wrong) attempt to justify this bug as a feature ( command ls -d not working ):

You're right, stress_junkie. And it's quite logical too:
Think about what "ls -d *" does internally:
first the shell expands the * to the names of all the files and directories in the current directory.
Then the shell passes all that to "ls -d", so the actual command that is executed is something like:
ls -d file1 dir1 file2 file3 ...

ls will list the contents of each of the arguments after the -d option. As if it would recursively call itself
on each separate argument.
ls -d file1
ls -d dir1
ls -d file2
etc

The -d won't have any effect on the listings of the files.
It only has an effect on the listings of "dir1", "dir2". For those lists, it won't list the contents of the subdirectories dir1, dir2,..., but just the subdirectories themselves.

So, what you get as a result is indeed a list of all files and subdirs of the current directory. Logical, no?

Options

Options used with the ls command can be listed separately or concatenated.  This means the following commands are effectively identical:

ls -l -F
ls -lF 

If no files or directories are named in the arguments, then the contents of the current directory are listed. By default, the names are listed in alphabetical order.

Mandatory arguments to long options are mandatory for short options too.

-a, --all
do not ignore entries starting with .
-A, --almost-all
do not list implied . and ..
--author
with -l, print the author of each file
-b, --escape
print octal escapes for nongraphic characters
--block-size=SIZE
use SIZE-byte blocks. See SIZE format below
-B, --ignore-backups
do not list implied entries ending with ~
-c
with -lt: sort by, and show, ctime (time of last modification of file status information) with -l: show ctime and sort by name otherwise: sort by ctime
-C
list entries by columns
--color[=WHEN]
colorize the output. WHEN defaults to 'always' or can be 'never' or 'auto'. More info below
-d, --directory
list directory entries instead of contents, and do not dereference symbolic links
-D, --dired
generate output designed for Emacs' dired mode
-f
do not sort, enable -aU, disable -ls --color
-F, --classify
append indicator (one of */=>@|) to entries
--file-type
likewise, except do not append '*'
--format=WORD
across -x, commas -m, horizontal -x, long -l, single-column -1, verbose -l, vertical -C
--full-time
like -l --time-style=full-iso
-g
like -l, but do not list owner
--group-directories-first
group directories before files.
augment with a --sort option, but any
use of --sort=none (-U) disables grouping
-G, --no-group
in a long listing, don't print group names
-h, --human-readable
with -l, print sizes in human readable format (e.g., 1K 234M 2G)
--si
likewise, but use powers of 1000 not 1024
-H, --dereference-command-line
follow symbolic links listed on the command line
--dereference-command-line-symlink-to-dir
follow each command line symbolic link that points to a directory
--hide=PATTERN
do not list implied entries matching shell PATTERN (overridden by -a or -A)
--indicator-style=WORD
append indicator with style WORD to entry names: none (default), slash (-p), file-type (--file-type), classify (-F)
-i, --inode
print the index number of each file
-I, --ignore=PATTERN
do not list implied entries matching shell PATTERN
-k
like --block-size=1K
-l
use a long listing format
-L, --dereference
when showing file information for a symbolic link, show information for the file the link references rather than for the link itself
-m
fill width with a comma separated list of entries
-n, --numeric-uid-gid
like -l, but list numeric user and group IDs
-N, --literal
print raw entry names (don't treat e.g. control characters specially)
-o
like -l, but do not list group information
-p, --indicator-style=slash
append / indicator to directories
-q, --hide-control-chars
print ? instead of non graphic characters
--show-control-chars
show non graphic characters as-is (default unless program is 'ls' and output is a terminal)
-Q, --quote-name
enclose entry names in double quotes
--quoting-style=WORD
use quoting style WORD for entry names: literal, locale, shell, shell-always, c, escape
-r, --reverse
reverse order while sorting
-R, --recursive
list subdirectories recursively
-s, --size
print the allocated size of each file, in blocks
-S
sort by file size
--sort=WORD
sort by WORD instead of name: none -U, extension -X, size -S, time -t, version -v
--time=WORD
with -l, show time as WORD instead of modification time: atime -u, access -u, use -u, ctime -c, or status -c; use specified time as sort key if --sort=time
--time-style=STYLE
with -l, show times using style STYLE: full-iso, long-iso, iso, locale, +FORMAT. FORMAT is interpreted like 'date'; if FORMAT is FORMAT1<newline>FORMAT2, FORMAT1 applies to non-recent files and FORMAT2 to recent files; if STYLE is prefixed with 'posix-', STYLE takes effect only outside the POSIX locale
-t
sort by modification time
-T, --tabsize=COLS
assume tab stops at each COLS instead of 8
-u
with -lt: sort by, and show, access time with -l: show access time and sort by name otherwise: sort by access time
-U
do not sort; list entries in directory order
-v
natural sort of (version) numbers within text
-w, --width=COLS
assume screen width instead of current value
-x
list entries by lines instead of by columns
-X
sort alphabetically by entry extension
-1
list one file per line

SELinux options:

--lcontext
Display security context. Enable -l. Lines will probably be too wide for most displays.
-Z, --context
Display security context so it fits on most displays. Displays only mode, user, group, security context and file name.
--scontext
Display only security context and file name.
--help
display this help and exit
--version
output version information and exit

SIZE may be (or may be an integer optionally followed by) one of following: KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.

Using color to distinguish file types is disabled both by default and with --color=never. With --color=auto, ls emits color codes only when standard output is connected to a terminal. The LS_COLORS environment variable can change the settings. Use the dircolors command to set it.

The difference between ls and ls * commands

One confusing behavior of ls is the difference between the ls command and the ls * command.

For ordinary files, the two commands produce the same output, but when subdirectories are present, ls recursively list subdirectories too.

NOTE: In multicolumn output mode, the files are listed column-wise and not row-wise as you might expect. 

It is important to understand the information provided by the -l (lowercase L) option. This option is the only way to discover key information, such as file type, ownership, and security, associated with each file. The long-format output of the ls command contains, typically, seven fields:

NOTE:  Do not confuse the ls -l (lowercase L) command with the ls -1 (numeric one) command. On some systems, the -1 option is used to force a single-column output from ls.

The following is a sample output of an ls -l command:

% ls -l /etc/passwd
-rw-r--r--  1 root  adm    19797 Aug 20 05:58 /etc/passwd

It is interesting to note that the modification date field does not contain "year" information.

Basic regular expressions

Command ls supports so called "basic regular expression", the most primitive type of regular expressions. The five special characters ("*", "?", "[", "]", and "-") used in filename generation and pathname expansion are discussed in the following sections.

The "*" Metacharacter

The asterisk ("*") is the most universal wildcard and is often used. It simply means any and all characters. For example, the string "a*" means all files beginning with the letter "a". You can use as many asterisks in a single expression as you need to define a set of files. For example, the expression *xx*.dat defines any filename with the extension dat that has xx anywhere in the rest of the name. Matches include the filenames abxx.dat, 1xx33.dat, xxyyzz.dat, and the simple name xx.dat.

The "?" Metacharacter

The question mark ("?") represents a single occurrence of any character. Thus the string "???" represents all files whose names consist of just three characters. You can generate a list of files with three-character extensions with the string *.???. For example, if you're searching a directory containing graphics images as well as other data, the following command lists all files with extensions such as tif, jpg, and gif as well as any other files with three-character extensions:

ls *.???

The "[]" Expression

Using the square brackets, you can select a class of characters such as [124], which allows only the characters 1, 2, or 4. You can also describe a range of characters such as [A-Z], which represents any characters between uppercase A and uppercase Z, inclusive. You can also specify a set of ranges such as [1-3, 5-8, a-e, A-E].

The hyphen ("-") loses its role as a metacharacter when it is used outside the square brackets. Conversely, the asterisk and the question mark lose their power as metacharacters when they are used within the square brackets. For example, -[*?]abc matches exactly two filenames: -*abc and -?abc.


TIP: Although possible, it is best to avoid creating filenames that contain dashes, asterisks, question marks, or other metacharacters.


Special Characters

Special characters, or metacharacters, are characters that have a special meaning to the shell. Avoid using any of these characters in a filename because files with metacharacters in their names are somewhat tricky to access, and certain programs might not be able to access them at all. The standard special characters are as follows:

& ; | * ? ` " ´ [ ] ( ) $ < > { } ^ # / \ % ! ~

NOTE: The ~/ combination can be used to reference your home directory. Therefore, cd ~/  (or simply cd) changes your working directory to your home directory. Similarly, ~username can be used to reference that user's home directory. 


Although not considered special characters, Return, Spacebar, and Tab also have special meaning to the shell. Return usually ends a command line and initiates execution of a command. The Space and Tab characters separate elements on the command line and are collectively known as white spaces or blanks.

In you need to use one of the metacharacters as a regular character, you can quote it. Another often used term with the same meaning as quote is escape: You can escape a metacharacter. The shell treats a quoted metacharacter as a regular character. There are three ways to quote, or escape, a character:


CAUTION
The only way to quote control characters, such as Ctrl-h and Ctrl-m, is to precede each with a Ctrl-v. Quotation marks and backslashes don't work for control characters.


The most commonly used quoting method is to use backslashes.


Top updates

Softpanorama Switchboard
Softpanorama Search


NEWS CONTENTS

Old News ;-)

[Jun 28, 2017] Files, Users, and Shell Customization Listing Files InformIT

From chapter 3 of Linux Shell Scripting with Bash by By Ken O. Burtch . which is very good book
Jan 29, 2004 | www.informit.com

Listing Files

The ls ( list ) command shows the contents of the current directory. Although ls is a familiar command available on all Unix-like operating system, Linux uses the ls command from the GNU fileutils project and has many special switches and features.

$ ls

archive  check-orders.sh orders.txt

ls has switches that affect how the files are listed, including the level of detail, the sorting order, and the number of columns. Most Linux distributions set up certain defaults for ls command. Red Hat, for example, has the -q and -F switches on by default. From the point of view of script writing, it's not safe to use the ls command in a script without specifying the appropriate switches because you can't be sure which defaults a particular distribution uses.

ls hides files that begin with a period. This is the Linux convention for configuration files, history files, and other files that a user isn't normally interested in. To see these files, use the -A ( all ) switch. Use -a ( absolutely all ) to show the implicit . and .. files as well.

$ ls -A

.bash_history .bash_logout .bash_profile .bashrc archive 
check-orders.sh orders.txt

The filenames can be printed in color to show the kind of file they are. The colors are defined in a file /etc/DIR_COLORS. You can customize the colors using a .dir_colors file in your own directory. The format of the file is described in the /etc/DIR_COLORS file.

To display the files without color and with symbols instead, use the --color and --classify (or -F ) switches. (On most Linux distributions, this feature is turned on using aliases.)

$ls --color=never --classify

archive/ check-orders.sh* orders.txt

The --classify symbols are directories (/), programs (*), symbolic links (@), pipes (|), and Unix domain socket files (=). These symbols are not a part of the name: They are hints as to the type of file. In this example, archive is a directory and check-orders.sh is a program.

Another very important switch is --hide-control-chars (or -q ). Linux filenames can contain any character, even control characters. It is possible to create a filename with hidden characters in the name. In these cases, you can't rename or delete the file unless you know what the hidden characters are. Contrary to what the name implies, the --hide-control-chars switch displays any unprintable characters in the filename as question marks, making their locations visible.

$ rm orders.txt

rm: orders.txt non-existent
$ ls --color=never --classify –-hide-control-chars

archive/ check-orders.sh* orde?rs.txt

A complete list of switches appears at the end of this chapter.

[Jul 03, 2016] Strange Files Deletion and Renaming in Shell

[Dec 07, 2015] 7 Quirky 'ls' Command Tricks Every Linux User Should Know by Avishek Kumar

March 23, 2015

We have covered most of the things on ‘ls‘ command in last two articles of our Interview series. This article is the last part of the ‘ls command‘ series. If you have not gone through last two articles of this series you may visit the links below.
◾15 Basic ‘ls’ Command Examples in Linux
◾15 Interview Questions on Linux “ls” Command – Part 1
◾10 Useful ‘ls’ Command Interview Questions – Part 2

ls command tricks
7 Quirky ls Command Tricks

HowTo Turn On or Off Colors For ls Command In Bash On a Linux and Unix-like Systems

Task: Turn off colors for ls command

Type the following command

$ ls --color=none

Or just remove alias with unalias command:

$ unalias ls

Task: Turn on colors for ls command

Use any one of the following command:

$ ls --color=auto
$ ls --color=tty

Directory colors have been annoying me - FedoraForum.org

glennzo Online
Un-Retired Administrator Join Date: Mar 2004
Location: Salem, Mass USA
Age: 57
Posts: 14,837
linuxfirefox

Directory colors have been annoying me

--------------------------------------------------------------------------------

I didn't like the fact that folders on my NTFS partitions were shown in blue on a green background. I though that this was just plain ugly. I set out to change that.

In the file /etc/DIR_COLORS there is a line that reads:


PHP Code:
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky

A far as I can tell this is the line that is responsible for the ugly blue on green background display. I changed it so that there was essentially no background color. Just blue text. The edited line then is:


PHP Code:
OTHER_WRITABLE 34;1 # dir that is other-writable (o+w) and not sticky

To see the change I needed to close and re-open the terminal. I'm happy again, at least for a few minutes or until someone tells me my method is just plain wrong, and can now function as a productive member of society.

Is this the proper method? No freakin' idea.
Did I get the desired results? Yep.
Will I be proven wrong at some point? Probably.
Do I care? Nope.

Just thought I'd share in case anyone else despises the blue on green text.
__________________
Glenn
The Bassinator © ®
[SIGPIC][/SIGPIC]
Laptop: Just a couple of old single core units
Desktop: BioStar MCP6PB M2+ / AMD Phenom 9750 Quad Core / 4GB / Kingston HyperX 3K SSD 240GB SATA 3.0 / 1TB SATA / EVGA GeForce 8400 GS 1GB
Reply With Quote

glennzo
View Public Profile
Find all posts by glennzo

#2 Old 21st April 2012, 02:46 PM
PabloTwo Offline
"Registered User" T-Shirt Winner Join Date: Mar 2007
Location: Seville, FL
Posts: 6,203
linuxchrome

Re: Directory colors have been annoying me

--------------------------------------------------------------------------------

That's basically correct. There are some old moldy threads here on the forum discussing this. What I always do is to make a copy of /etc/DIR_COLORS to ~/.dir_colors, then edit the file in my home directory.

To make the ntfs directories appear as the same color as your other directories, the color code to use is:

Code:
OTHER_WRITABLE 01;34 # dir that is other-writable (o+w) and not sticky.

You can see the default directory color code with the command "dircolors -p". Near the top of the output, you'll see this:

Code:
DIR 01;34 # directoryReply With Quote

PabloTwo
View Public Profile
Find all posts by PabloTwo

#3 Old 21st April 2012, 03:56 PM
glennzo Online
Un-Retired Administrator Join Date: Mar 2004
Location: Salem, Mass USA
Age: 57
Posts: 14,837
linuxubuntuchrome

Re: Directory colors have been annoying me

--------------------------------------------------------------------------------

Thanks for the tips PabloTwo
__________________
Glenn
The Bassinator © ®
[SIGPIC][/SIGPIC]
Laptop: Just a couple of old single core units
Desktop: BioStar MCP6PB M2+ / AMD Phenom 9750 Quad Core / 4GB / Kingston HyperX 3K SSD 240GB SATA 3.0 / 1TB SATA / EVGA GeForce 8400 GS 1GB
Reply With Quote

glennzo
View Public Profile
Find all posts by glennzo

#4 Old 21st April 2012, 04

Useless Use of Cat Award

Useless Use of ls *

Very clever. Usually this is seen as part of a for loop:

	for f in `ls *`; do
		command "$f"   # newbies will often forget the quotes, too
	done
Of course, the ls is not very useful. It will just waste an extra process doing absolutely nothing. The * glob will be expanded by the shell before ls even gets to see the file names (never mind that ls lists all files by default anyway, so naming the files you want listed is redundant here).

Here's a related but slightly more benign error (because echo is often built into the shell):

	for f in `echo *`; do
		command "$f"
	done
But of course the backticks are still useless, the glob itself already does the expansion of the file names. (See Useless Use of echo above.) What was meant here was obviously
	for f in *; do
		command "$f"
	done
Additionally, oftentimes the command in the loop doesn't even need to be run in a for loop, so you might be able to simplify further and say
	command *
A different issue is how to cope with a glob which expands into file names with spaces in them, but the for loop or the backticks won't help with that (and will even make things harder). The plain glob generates these file names just fine; click here for an example. See also Useless Use of Backticks

Finally, as Aaron Crane points out, the result of ls * will usually be the wrong thing if you do it in a directory with subdirectories; ls will list the contents of those directories, not just their names.

Recommended Links

Softpanorama hot topic of the month

Softpanorama Recommended

Internal

External



Etc

FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available in our efforts to advance understanding of environmental, political, human rights, economic, democracy, scientific, and social justice issues, etc. We believe this constitutes a 'fair use' of any such copyrighted material as provided for in section 107 of the US Copyright Law. In accordance with Title 17 U.S.C. Section 107, the material on this site is distributed without profit exclusivly for research and educational purposes.   If you wish to use copyrighted material from this site for purposes of your own that go beyond 'fair use', you must obtain permission from the copyright owner. 

ABUSE: IPs or network segments from which we detect a stream of probes might be blocked for no less then 90 days. Multiple types of probes increase this period.  

Society

Groupthink : Two Party System as Polyarchy : Corruption of Regulators : Bureaucracies : Understanding Micromanagers and Control Freaks : Toxic Managers :   Harvard Mafia : Diplomatic Communication : Surviving a Bad Performance Review : Insufficient Retirement Funds as Immanent Problem of Neoliberal Regime : PseudoScience : Who Rules America : Neoliberalism  : The Iron Law of Oligarchy : Libertarian Philosophy

Quotes

War and Peace : Skeptical Finance : John Kenneth Galbraith :Talleyrand : Oscar Wilde : Otto Von Bismarck : Keynes : George Carlin : Skeptics : Propaganda  : SE quotes : Language Design and Programming Quotes : Random IT-related quotesSomerset Maugham : Marcus Aurelius : Kurt Vonnegut : Eric Hoffer : Winston Churchill : Napoleon Bonaparte : Ambrose BierceBernard Shaw : Mark Twain Quotes

Bulletin:

Vol 25, No.12 (December, 2013) Rational Fools vs. Efficient Crooks The efficient markets hypothesis : Political Skeptic Bulletin, 2013 : Unemployment Bulletin, 2010 :  Vol 23, No.10 (October, 2011) An observation about corporate security departments : Slightly Skeptical Euromaydan Chronicles, June 2014 : Greenspan legacy bulletin, 2008 : Vol 25, No.10 (October, 2013) Cryptolocker Trojan (Win32/Crilock.A) : Vol 25, No.08 (August, 2013) Cloud providers as intelligence collection hubs : Financial Humor Bulletin, 2010 : Inequality Bulletin, 2009 : Financial Humor Bulletin, 2008 : Copyleft Problems Bulletin, 2004 : Financial Humor Bulletin, 2011 : Energy Bulletin, 2010 : Malware Protection Bulletin, 2010 : Vol 26, No.1 (January, 2013) Object-Oriented Cult : Political Skeptic Bulletin, 2011 : Vol 23, No.11 (November, 2011) Softpanorama classification of sysadmin horror stories : Vol 25, No.05 (May, 2013) Corporate bullshit as a communication method  : Vol 25, No.06 (June, 2013) A Note on the Relationship of Brooks Law and Conway Law

History:

Fifty glorious years (1950-2000): the triumph of the US computer engineering : Donald Knuth : TAoCP and its Influence of Computer Science : Richard Stallman : Linus Torvalds  : Larry Wall  : John K. Ousterhout : CTSS : Multix OS Unix History : Unix shell history : VI editor : History of pipes concept : Solaris : MS DOSProgramming Languages History : PL/1 : Simula 67 : C : History of GCC developmentScripting Languages : Perl history   : OS History : Mail : DNS : SSH : CPU Instruction Sets : SPARC systems 1987-2006 : Norton Commander : Norton Utilities : Norton Ghost : Frontpage history : Malware Defense History : GNU Screen : OSS early history

Classic books:

The Peter Principle : Parkinson Law : 1984 : The Mythical Man-MonthHow to Solve It by George Polya : The Art of Computer Programming : The Elements of Programming Style : The Unix Hater’s Handbook : The Jargon file : The True Believer : Programming Pearls : The Good Soldier Svejk : The Power Elite

Most popular humor pages:

Manifest of the Softpanorama IT Slacker Society : Ten Commandments of the IT Slackers Society : Computer Humor Collection : BSD Logo Story : The Cuckoo's Egg : IT Slang : C++ Humor : ARE YOU A BBS ADDICT? : The Perl Purity Test : Object oriented programmers of all nations : Financial Humor : Financial Humor Bulletin, 2008 : Financial Humor Bulletin, 2010 : The Most Comprehensive Collection of Editor-related Humor : Programming Language Humor : Goldman Sachs related humor : Greenspan humor : C Humor : Scripting Humor : Real Programmers Humor : Web Humor : GPL-related Humor : OFM Humor : Politically Incorrect Humor : IDS Humor : "Linux Sucks" Humor : Russian Musical Humor : Best Russian Programmer Humor : Microsoft plans to buy Catholic Church : Richard Stallman Related Humor : Admin Humor : Perl-related Humor : Linus Torvalds Related humor : PseudoScience Related Humor : Networking Humor : Shell Humor : Financial Humor Bulletin, 2011 : Financial Humor Bulletin, 2012 : Financial Humor Bulletin, 2013 : Java Humor : Software Engineering Humor : Sun Solaris Related Humor : Education Humor : IBM Humor : Assembler-related Humor : VIM Humor : Computer Viruses Humor : Bright tomorrow is rescheduled to a day after tomorrow : Classic Computer Humor

The Last but not Least


Copyright © 1996-2016 by Dr. Nikolai Bezroukov. www.softpanorama.org was created as a service to the UN Sustainable Development Networking Programme (SDNP) in the author free time. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License.

The site uses AdSense so you need to be aware of Google privacy policy. You you do not want to be tracked by Google please disable Javascript for this site. This site is perfectly usable without Javascript.

Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine.

FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available to advance understanding of computer science, IT technology, economic, scientific, and social issues. We believe this constitutes a 'fair use' of any such copyrighted material as provided by section 107 of the US Copyright Law according to which such material can be distributed without profit exclusively for research and educational purposes.

This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree...

You can use PayPal to make a contribution, supporting development of this site and speed up access. In case softpanorama.org is down you can use the at softpanorama.info

Disclaimer:

The statements, views and opinions presented on this web page are those of the author (or referenced source) and are not endorsed by, nor do they necessarily reflect, the opinions of the author present and former employers, SDNP or any other organization the author may be associated with. We do not warrant the correctness of the information provided or its fitness for any purpose.

Last modified: July, 13, 2017