のような場所にルートがあるソース コード ツリーがあり/home/me/workspace
ます。多くのレベルの深さの多くのサブディレクトリがあります。特に、いくつかのツールを含むパスがあります。
/home/me/workspace/tools/scripts
string を渡すツリー内の任意の場所から呼び出すことができる bash 関数を作成していますtools/scripts
。/
この関数は、現在の作業ディレクトリからパス fragment を探すまで反復し、tools/scripts
見つかった場合は、見つかった絶対パスを出力します。この例で/home/me/workspace
は、印刷されます。パス フラグメントがまったく見つからない場合は、何も出力されません。
私はすでにこれを行う次のbash関数を持っています:
search_up ()
(
while [ $PWD != "/" ]; do
if [ -e "$1" ]; then
pwd
break
fi
cd ..
done
)
しかし、これは少し長すぎるようです。これを bash 自体、またはおそらく単一のfind
コマンド、またはその他の一般的なユーティリティで行う方法が他にあるかどうか疑問に思っています。私は特に読みやすさと簡潔さを求めています。
ツリー全体の完全な再帰検索を探しているわけではないことに注意してください。
また、私のバッシュは最新のものではないため、最新の最高のものを使用しないでください:
$ bash --version
GNU bash, version 3.00.15(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
$