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/*.o
tenha ESPAÇOS em seus nomes.
Veja como funciona:
echo folder/*.o
produz 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 egrep
feliz.
egrep -v folder/main.o
elimina o nome de arquivo indesejado desta lista.
$()
coloca o restante dos nomes de arquivos na linha de comando. Como $IFS
o padrão é ESPAÇO, TAB, NEWLINE, não tenho que tr
levá-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"