Você normalmente faria isso com um makefile algo assim:
IN = $(wildcard inputs/*.txt)
OUT = $(subst inputs/,outputs/,$(IN))
outputs/%.txt: inputs/%.txt
cp $< $@
default: $(OUT)
Isso faz com que o destino padrão (o primeiro no arquivo) dependa de OUT
, que é a expansão glob dos arquivos existentes em IN
com a sequência de diretórios alterada de entradas para saídas.
Se você quiser alterar o sufixo, há muitas outras funções internas para manipular os destinos. Por exemplo, você pode adicionar uma operação intermediária:
IN2 = $(addsuffix .out,$(basename $(IN)))
A função basename
removerá o% final.txt
e o addsuffix
adicionará% .out
.