各サブフォルダを繰り返し、フォルダを確認してスクリプトを実行します。

各サブフォルダを繰り返し、フォルダを確認してスクリプトを実行します。

さまざまな深さのサブフォルダがあるディレクトリがあります。すべての項目を繰り返して特定の名前のフォルダが含まれていることを確認し、そのディレクトリが存在する場合はスクリプトを実行したいと思います(foo.sh混乱を避けるためにこのスクリプトを呼び出します)。

foo.shターゲットフォルダが見つかったら、現在のフォルダで実行する必要があります。例:

/A
  /subA-1
  /subA-2
    /target
  /subA-3
    /sub-subA-3
       /target

私が探しているコマンド/スクリプトはで実行する必要があり、名前付きフォルダを/A探すすべてのサブフォルダを繰り返しますtarget。入力すると、/subA-2この条件が満たされ、/subA-2foo.shが実行されます。同じ/sub-subA-3ですが、そうではありません/subA-3

foo.sh入力は不要で、含めるだけです/target

ベストアンサー1

それは簡単です:

find A -type d -name target -execdir foo.sh \;

マニュアルページから:

-execdirコマンド;

-execに似ていますが、指定されたコマンドは一致するファイルを含むサブディレクトリで実行されます。

例:

問題に応じてディレクトリ構造を作成して印刷します。

/tmp$ mkdir A; cd A
/tmp/A$ mkdir -p subA-1 subA-2/target subA-3/sub-subA-3/target
/tmp/A$ find .
.
./subA-2
./subA-2/target
./subA-3
./subA-3/sub-subA-3
./subA-3/sub-subA-3/target
./subA-1

これで、コマンドを実行して何が起こるかをpwd示しますfoo.sh

/tmp/A$ find . -type d -name target -execdir pwd \;
/tmp/A/subA-2
/tmp/A/subA-3/sub-subA-3

おすすめ記事