Maneira simples de obter todos os arquivos .o, exceto um

Maneira simples de obter todos os arquivos .o, exceto um

Estou tentando vincular todos os arquivos *.o de outra pasta e gostaria de fazer algo como;

g++ *.o (folder/*.o and not folder/main.o) -o bin

Existe alguma maneira de usar algum tipo de regex simples aqui?

Responder1

Tente g++ *.o $( echo folder/*.o |tr ' ' "\n" | egrep -v folder/main.o ), assumindo que nenhum deles folder/*.otenha ESPAÇOS em seus nomes.

Veja como funciona:

echo folder/*.oproduz uma lista de nomes de arquivos separados por espaço, com o diretório.
tr ' ' "\n"altera todos os espaços para novas linhas (nos dando um nome de arquivo por linha, o que deixa egrepfeliz.
egrep -v folder/main.oelimina o nome de arquivo indesejado desta lista.
$()coloca o restante dos nomes de arquivos na linha de comando. Como $IFSo padrão é ESPAÇO, TAB, NEWLINE, não tenho que trlevá-los de volta aos espaços.

Responder2

Você deve usar makefiles, ou ferramentas automáticas ainda melhores, mas você pode fazer algo assim:

ls folder/ | grep "*.o" | grep -v "main.o" | while read -r file; do g++ $file -o bin; done

Esta pergunta seria melhor respondida em um site de pilha relacionado ao bash de qualquer maneira, haha.

Responder3

Isso deve funcionar:

ls -1 folder/*.o | grep -v main.o | xargs -I{} g++ {} -o bin

Explicação:

  • ls -1 folder/*.o -> lista todos os arquivos .o (um por linha) na pasta pasta

  • grep -v main.o -> exclui main.o da lista

  • xargs -I{} g++ {} -o bin -> execute "arquivo g++ -o bin"

informação relacionada