Usando find
:
find /home/work -type f -name Makefile -execdir make install \;
find
recursivamente pesquisa /home/work
para arquivos ( -type f
) denominados Makefile
( -name Makefile
) e executa make install
no diretório em que o arquivo foi encontrado ( -execdir make install \;
).
Como alternativa, se você estiver usando o bash, ative o **
(que é recursivo):
shopt -s extglob
Então faça:
for f in /home/work/**/;
do
[[ -f $f/Makefile ]] && echo Entering into "$f" && make -C "$f" install
done
Com uma barra final após o caractere curinga, o bash selecionará apenas os diretórios, para que você possa eliminar essa verificação. E make
tem uma opção para alterar os diretórios antes de iniciar: -C
. Então, podemos evitar o cd
também:
-C dir, --directory=dir
Change to directory dir before reading the makefiles or doing
anything else. If multiple -C options are specified, each is
interpreted relative to the previous one: -C / -C etc is
equivalent to -C /etc. This is typically used with recursive
invocations of make.