![在子目录中查找脚本并沿着路径执行该脚本](https://linux22.com/image/153125/%E5%9C%A8%E5%AD%90%E7%9B%AE%E5%BD%95%E4%B8%AD%E6%9F%A5%E6%89%BE%E8%84%9A%E6%9C%AC%E5%B9%B6%E6%B2%BF%E7%9D%80%E8%B7%AF%E5%BE%84%E6%89%A7%E8%A1%8C%E8%AF%A5%E8%84%9A%E6%9C%AC.png)
我有一个脚本,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,start
每个service.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