Executa todos os arquivos em uma lista

3

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.

    
por CmdrMoozy 14.08.2014 / 19:01

4 respostas

2

Tente:

$ find build/ -type f -executable | ack --nocolor "\d{3}$" |
while read prog
do
    "$prog"
done
    
por 14.08.2014 / 19:26
4

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"' _ {} \;
    
por 14.08.2014 / 19:39
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.

    
por 14.08.2014 / 20:01
1
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.

    
por 15.08.2014 / 07:14