さまざまな深さのサブフォルダがあるディレクトリがあります。すべての項目を繰り返して特定の名前のフォルダが含まれていることを確認し、そのディレクトリが存在する場合はスクリプトを実行したいと思います(foo.sh
混乱を避けるためにこのスクリプトを呼び出します)。
foo.sh
ターゲットフォルダが見つかったら、現在のフォルダで実行する必要があります。例:
/A
/subA-1
/subA-2
/target
/subA-3
/sub-subA-3
/target
私が探しているコマンド/スクリプトはで実行する必要があり、名前付きフォルダを/A
探すすべてのサブフォルダを繰り返しますtarget
。入力すると、/subA-2
この条件が満たされ、/subA-2
foo.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