特定の相対ディレクトリで検索を使用する[閉じる]

特定の相対ディレクトリで検索を使用する[閉じる]

私が次のディレクトリにあるとしましょう。

/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...値に対してコマンドを実行します。mydirB-dir

PWDスクリプトの実行中に現在のディレクトリ()が更新されます。ディレクトリパス文字列を暗黙的に使用するよりも、ディレクトリパス文字列を操作してディレクトリの変更を避けることは難しくありませんが、$PWD私はこの方法を実装することにしました。

関連情報