次のようにファイル構造の深いディレクトリにあるとしましょう。
/home/cory/projects/foo/bar/bash/baz
現在、フォルダbaz
またはフォルダのいずれかにあることがわかっています。以上私(たとえば、、、、、home
またはcory
)にはファイルがありprojects
ます。追加フォルダを検索せずにファイルを見つける方法は?foo
bar
bash
happy
ベストアンサー1
#!/bin/bash
function upsearch () {
test / == "$PWD" && return || test -e "$1" && echo "found: " "$PWD" && return || cd .. && upsearch "$1"
}
この機能は現在のディレクトリから始まります。これは関数であり、ナビゲーション時にディレクトリを変更することに注意してください。ファイルが存在するディレクトリで停止し、そうでない場合はルートディレクトリ/に移動します。
これを関数ではなくスクリプトに変更し、ファイルがルートディレクトリにない場合は再度移動できます。
そのディレクトリに CD を移動したくない場合は、次のようにします。
upsearch () {
local slashes=${PWD//[^\/]/}
local directory="$PWD"
for (( n=${#slashes}; n>0; --n ))
do
test -e "$directory/$1" && echo "$directory/$1" && return
directory="$directory/.."
done
}
ファイルが/home/cory/にある場合、結果は/home/cory/a/b/c/../../../happyと同じです。きれいな道路が必要な場合はできることがあります。
cd "$directory"
echo "$PWD"
cd -
成功について。
検索を通常のファイルに制限し、ディレクトリ、シンボリックリンクなどを除外するには、テストを-eではなく-fに変更できます。