Tente:
$ find build/ -type f -executable | ack --nocolor "\d{3}$" |
while read prog
do
"$prog"
done
Eu tenho uma árvore de código-fonte que, quando make é executado, produz vários executáveis chamados "001", "002" e etc. Estou tentando escrever um script que encontrará todos esses executáveis na minha fonte árvore e, em seguida, executá-los. Eu tenho isso até agora:
find build/ -type f -executable | ack --nocolor "\d{3}$"
Qual lista os executáveis que eu quero executar corretamente.
Minha pergunta é: como faço para executar todos eles? Eu pensei que talvez alguma combinação de xargs e exec iria fazer isso, mas exec parece tentar substituir o shell atual com o comando, que não é o que eu quero.
Isso pode funcionar
find build/ -type f -executable -exec sh -c 'exec "$1"' _ {} \;
Ou para filtrar apenas os arquivos 001 , 002 ..
find build/ -type f -name '*[0-9][0-9][0-9]' -executable -exec sh -c 'exec "$1"' _ {} \;
Uma das coisas em que find é bom é selecionar arquivos que correspondam aos critérios,
então você pode usá-lo para escolher os arquivos cujos nomes consistem em três dígitos.
E então você pode usar este formulário mais simples:
find build -name "[0-9][0-9][0-9]" -type f -executable -exec {} ";"
E você pode usar -regex '.*/\d{3}
se você puder encontrar o -regextype correto para acompanhar.
find -type f -name '00[123]' -exec env - {} \;
Adicione em qualquer ambiente que você queira declarar para os diferentes executáveis. Talvez 2>/dev/null se houver arquivos 00[123] não executáveis por aí e você não quiser ouvir sobre isso.
Tags find executable shell-script