CLIマジック:ディレクトリの一覧表示をカスタマイズする小スクリプト

 lsを実行する場合、ディレクトリの一覧から特定のファイルを探し出すと共に、そのファイルが存在するディレクトリの状況も確認したいことがある。lsの出力をgrepにパイプしてもよいのだが、それではディレクトリ全体を表示して条件にマッチするファイルだけ表示の色を変えたりはできない。今回は、そうした形でlsの結果を表示できる簡単なスクリプトを作成しよう。

 たとえば、「/proc/sys/net/ipv4」からファイル名に“max”を含むファイルを見つけ出したいとする。「ls /proc/sys/net/ipv4 | grep max」とすれば、“max”を含む部分はgrepによって赤色の表示に変わるが、ディレクトリ一覧のそれ以外の部分は表示されない。これらの双方を可能にしてくれるのが、次のスクリプトだ。

#!/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は、色の設定だけでなくターミナルの機能も変更できるコマンドだ。これにはterminfoデータベースが利用されている。また、ls –Cを使うと、パイプやリダイレクトの利用時でもディレクトリの内容が複数列にわたって表示されるので、1画面により多くのファイルを出力できる。そのうえでsedによる簡単な置換を行う。「$SEARCH」という文字列の部分を見つけ、色だけを変えた同じ文字列で置き換えるわけだ。

 すべてのユーザから使えるように、このスクリプトを「/usr/bin」にコピーして、パーミッションの変更を行う(「chmod 4755 /usr/bin/l」を実行)。あとは、次のようにスクリプトを実行すればよい。

l /etc conf

 ディレクトリ一覧表示のカスタマイズはそれほど重要な問題ではないが、こうした些細な工夫で作業効率を上げられるのはLinuxの柔軟性のおかげだ。

Sergio Gonzalez DuranはLinux管理者、システム開発者、ネットワークセキュリティ・カウンセラとして活躍しつつ、Linux講座での指導とLinux/オープンソースに関するスペイン語のWebサイトlinuxtotal.com.mxの運営に携わっている。

Linux.com 原文