内部コマンドしか使えないような環境向けのシェルスクリプトを利用した findコマンドの実現方法です。
スポンサードリンク
| コマンド | 説明 |
|---|---|
| set | (1) シェル変数を表示 (2) シェルのオプションの設定、解除 (3) 一つのレコードから IFS で区切られたフィールドを取り出して位置パラメータに代入する |
| shift | 位置パラメータの内容をシフトする |
| echo | 与えられた文字列を返す |
| exit | 任意の位置で終了させる |
| exec | シェルに変わって引数で指定されたコマンドを新しいプロセスを作らずに実行する |
| eval | 引数をシェルの入力として解析してから実行する |
| wait | 現在実行している子プロセスの終了を待ち、終了状態を保存する |
| trap | 後始末をしてから終了させる |
| read | 標準入力から一行読み込み引数に指定された変数にその行をIFS で区切って代入する |
| : | 何もしないコマンド。引数の評価をする。 |
シェルでは再帰関数が利用できるため、再帰関数を利用してfindコマンドを実装してみました。
using : find.sh [検索したいディレクトリ] [検索したいファイル名]
例えば、「framework」ディレクトリ以下の「jni」という文字が含まれているファイルを検索したい場合は次のように記載します。
./find.sh framework *jni*
#!/bin/sh
# don't run it on Soralis
cmpValue() {
pattern=${1%${2}}
if [ "${pattern}" != "${1}" ]; then
echo "`pwd`/${1}"
fi
}
recFind() {
for line in * ; do
if [ -L $line ] ; then # symblic link
elif [ -d $line ] ; then
cmpValue $line $1
(cd $line; recFind $1)
elif [ -f $line ] ; then # file
cmpValue $line $1
fi
done
}
cd $1
recFind $2
ファイル・フォルダ名から指定された文字を比較しています。パラメータ後方から、パターンに最短一致した部分を除いています。
利用する場合にはfind.shに実行権限を付けて下さい。
スポンサードリンク