サブディレクトリでスクリプトを見つけ、パスに沿って実行します。

サブディレクトリでスクリプトを見つけ、パスに沿って実行します。

service.sh次のような多くのサブディレクトリから呼び出されるスクリプトがあります。/app/user

/app/user/new1/service.sh
/app/user/new2/new3/service.sh
/app/user/new4/new5/new6/service.sh

私の目標は、これらすべてを見つけて実行して、そのスクリプトと各スクリプトのサブディレクトリのパスとパラメータが一意になるようにするservice.shことです。stop,startservice.sh

例えば

/app/user/new1/service.sh stop
/app/user/new1/service.sh start

答え1

find組み合わせを試してみてください-execdir

find /app/user/ -type f -name 'service.sh' \
    -execdir ./service.sh stop   \; \
    -execdir ./service.sh start  \; 

./service.sh start成功した場合にのみ./service.sh stop実行されます。


テストのために、次のスクリプトを使用してAおよびBディレクトリにコピーできます。

script.sh:

# !/bin/sh

echo 'executing script in directory' "$PWD"
echo $1
echo

ディレクトリツリー:

.
├── dir_A
│   └── script.sh
└── dir_B
    └── script.sh

実行コマンド:

$ find -type f -name 'script.sh' -execdir ./script.sh stop \; -execdir ./script.sh start \;
executing script in directory /home/αғsнιη/test/dir_A
stop

executing script in directory /home/αғsнιη/test/dir_A
start

executing script in directory /home/αғsнιη/test/dir_B
stop

executing script in directory /home/αғsнιη/test/dir_B
start

関連情報