私が次のディレクトリにあるとしましょう。
/A-dir/B-dir/mydir/… some directories …/x-dir
find
で検索しmydir
たいのですが、現在の作業ディレクトリで「上に」移動すると、最初のディレクトリとして定義されてmydir
いることを事前に知りません(このパスは明示的に指定されています)。/A-dir/B-dir/
これにより、他のディレクトリfind
は検索されませmydir
んが、他のディレクトリは検索されませんB-dir
(そうでない場合は、次のものを使用できます)。
find /A-dir/B-dir/ -name … …
)。
答え1
find "${PWD%"${PWD#/A-dir/B-dir/*/}"}" ...
$PWD
(次の最初のディレクトリコンポーネント/A-dir/B-dir
)
または:
find "${PWD%"${PWD#/*/*/*/}"}" ...
(最初の3つのディレクトリコンポーネント)
または:
find "${PWD%"${PWD#/*/B-dir/*/}"}" ...
B-dir
(に表示される左端のコンポーネントの後の最初のディレクトリコンポーネントです$PWD
。)
を使用すると、zsh
次の操作も実行できます。
find ${(M)PWD#/*/B-dir/*/}
答え2
次のようなものがあなたが探しているものかもしれません。
#!/bin/bash
last="${PWD/*\/}"
while test / != "$PWD"
do
cd ..
this="${PWD/*\/}"
if test 'B-dir' = "$this"
then
find "$last" ...
break
fi
last="$this"
done
最初から始まり、/A-dir/B-dir/mydir/... some directories .../x-dir
到達するまでツリーの上に移動するとしますB-dir
。この時点では、以前のfind mydir...
値に対してコマンドを実行します。mydir
B-dir
PWD
スクリプトの実行中に現在のディレクトリ()が更新されます。ディレクトリパス文字列を暗黙的に使用するよりも、ディレクトリパス文字列を操作してディレクトリの変更を避けることは難しくありませんが、$PWD
私はこの方法を実装することにしました。