Eu perguntei no Stack Overflow e um usuário chamado perreal me ajudou a resolver isso, aqui é a resposta dele.
Veja o que eu fiz para funcionar:
-
Use
src=$(shell ls Photos | sed 's/ /?/g;s/.*/Photos\/
para corrigir o problema de espaços no comandowildcard
/')?
e fazer com que os destinos trabalhem com espaços. -
Isso deixa um ponto de interrogação no arquivo resultante, portanto, use uma função de chamada para substituir
replace = echo $(1) | sed 's/?/ /g'
por um espaço no arquivo final:@convert "$<" -scale 20% "''$(call replace,$@)''"
. Chame isso de %code% (eu usei apenas um backtick, mas não sei como obtê-lo para exibir corretamente).
Então, aqui está meu Makefile final:
src=$(shell ls Photos | sed 's/ /?/g;s/.*/Photos\/src=$(shell ls Photos | sed 's/ /?/g;s/.*/Photos\/%pre%/')
out=$(subst Photos,Compressed,$(src))
replace = echo $(1) | sed 's/?/ /g'
all : $(out)
clean:
@rmdir -r Compressed
Compressed:
@mkdir Compressed
Compressed/%.jpg: Photos/%.jpg Compressed
@echo "Compressing $<"
@convert "$<" -scale 20% "'$(call replace,$@)'"
Compressed/%.JPG: Photos/%.JPG Compressed
@echo "Compressing $<"
@convert "$<" -scale 20% "'$(call replace,$@)'"
/')
out=$(subst Photos,Compressed,$(src))
replace = echo $(1) | sed 's/?/ /g'
all : $(out)
clean:
@rmdir -r Compressed
Compressed:
@mkdir Compressed
Compressed/%.jpg: Photos/%.jpg Compressed
@echo "Compressing $<"
@convert "$<" -scale 20% "'$(call replace,$@)'"
Compressed/%.JPG: Photos/%.JPG Compressed
@echo "Compressing $<"
@convert "$<" -scale 20% "'$(call replace,$@)'"