December 11, 2007

CLI Magic: A little script to customize directory listings

Author: Sergio Gonzalez Duran

Sometimes when I run ls to get a directory listing, I am looking for a specific file, but I want to see the whole context where the file resides. While you can pipe the output of ls to grep, that doesn't show you the whole directory with the matched files highlighted in a different color. I create a small script to do just what I want.

For example, suppose that in /proc/sys/net/ipv4 I want to see files that have the pattern "max" as part of the name. I could run ls /proc/sys/net/ipv4 | grep max. grep changes the color to red where the pattern is found, but it doesn't display the files I want in the context of the entire directory listing. The following script does:

#!/bin/bash
# name of the script 'l' just the letter l

# a little bit of help in case of misuse
if [ $# -lt 2 ]
then
echo "usage: l /directory pattern"
echo "example: l /etc config"
exit
fi

# $DIR is the first argument, the path to the directory
DIR=$1

# $SEARCH is what you are looking for, and it's the second argument
SEARCH=$2

# $RED sets the text to inverted red, changing the capabilities of the terminal via terminfo parameters
# setaf 1 = red, smso = inverted
RED=`tput setaf 1; tput smso`

# $NORMAL returns text to normal attributes
NORMAL=`tput sgr0`

#
ls -C $DIR | sed s/"$SEARCH"/"$RED$SEARCH$NORMAL"/

tput is a command that allows you to change the capabilities of the terminal, not just set the colors; it's based on the terminfo database. I use ls ââ¬âC to put the directory listing in columns even if it's piped or redirected, so I can see more on a single screen. Then a simple sed substitution statement does the job; it finds whatever $SEARCH holds and substitutes for the same pattern with a change of color.

To make the script available to all users, copy it to /usr/bin and change the permissions (chmod 4755 /usr/bin/l). You can then run it like this:

l /etc conf

Customizing a directory listing may not be a very important issue, but thanks to the flexibility of Linux, you can increase your productivity with little tweaks.

Categories:

  • Tools & Utilities
  • Shell & CLI