A maneira mais simples seria usar find
para localizar todos os diretórios e depois modificar seu script para verificar se existe um diretório com o nome correto ( foobar
, por exemplo):
#!/bin/bash
targetDir="$@" ## The directory to run the script on
dirName="target" ## Change this to whatever the "target" is
cd "$trargetDir"
## Exit if the $targetDir doesn't have a directory with
## the name you're looking for
[ -d "$targetDir"/"$dirName" ] || exit
## If it does, cd into the $targetDir and continue the script
cd "$targetDir"
### The rest of the script goes here
...
Agora, você pode executar um comando find
e executá-lo em cada diretório encontrado:
find /target -type d -exec /path/to/script.sh "{}" \;
Você também pode fazer a coisa toda com find
, mas, pessoalmente, acho a solução acima mais limpa. Cabe a você, no entanto. Aqui está uma maneira:
pwd="$PWD"; find . -type d -name foobar -printf '%h#!/bin/bash
targetDir="$@" ## The directory to run the script on
dirName="target" ## Change this to whatever the "target" is
cd "$trargetDir"
## Exit if the $targetDir doesn't have a directory with
## the name you're looking for
[ -d "$targetDir"/"$dirName" ] || exit
## If it does, cd into the $targetDir and continue the script
cd "$targetDir"
### The rest of the script goes here
...
' |
while IFS= read -d '' dir; do cd "$dir" && foo.sh; cd "$pwd"; done