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