2012-12-20 15 views
13

Ich habe eine Make-Datei, die ich Bilder verwenden zu komprimieren:Make-Datei Wildcard Befehl verwenden für Dateinamen mit Leerzeichen

src=$(wildcard Photos/*.jpg) $(wildcard Photos/*.JPG) 
out=$(subst Photos,Compressed,$(src)) 

all : $(out) 

clean: 
    @rmdir -r Compressed 

Compressed: 
    @mkdir Compressed 

Compressed/%.jpg: Photos/%.jpg Compressed 
    @echo "Compressing $<" 
    @convert "$<" -scale 20% "[email protected]" 

Compressed/%.JPG: Photos/%.JPG Compressed 
    @echo "Compressing $<" 
    @convert "$<" -scale 20% "[email protected]" 

Allerdings, wenn ich ein Bild mit einem Leerzeichen im Namen haben, zum Beispiel Piper PA-28-236 Dakota.JPG, erhalte ich dieser Fehler:

make: *** No rule to make target `Compressed/Piper', needed by `all'. Stop. 

ich denke, das ein Problem in dem wildcard Befehl ist, aber ich bin nicht sicher, was es zu bekommen zu ändern zu arbeiten.

Wie kann ich mein Makefile ändern, um Leerzeichen in Dateinamen zuzulassen?

Antwort

7

Allgemeines Leerzeichen in Dateinamen, die eine schlechte Idee mit, aber für Ihren Fall kann diese Arbeit:

src=$(shell find Photos/ -iname '*.JPG' | sed 's/ /\\ /g') 

out=$(subst Photos,Compressed,$(src)) 

all : $(out) 

Compressed: 
    @mkdir Compressed 

Compressed/%: Photos/% Compressed 
    @echo "Compressing $<" 
    @convert "$<" -scale 20% "[email protected]" 
+0

Danke für Ihre Hilfe, dass die Räume in dem Wildcard-Problem zu beheben funktioniert. Ich habe es in 'src = $ (shell ls Fotos | sed 's// \\/g; s /.*/ Photos \/\ 0 /')' geändert, um 'JPG' und' jpg' zu erlauben. Aber jetzt bekomme ich den Fehler 'make: *** Keine Regel, um das Ziel zu machen 'Compressed/Piper PA-28-236 Dakota.JPG', benötigt von 'all'. Stop. "Jetzt muss ich herausfinden, wie man Ziele mit Räumen zur Arbeit bringt. – iBelieve

+1

Ich habe es zur Arbeit, danke für Ihre Hilfe. Ersetzen durch ein '?' Behebt das Zielproblem, fügte jedoch ein '?' In der resultierenden Datei hinzu. Ich benutzte eine Call-Funktion: 'replace = echo $ (1) | sed 's /?// g'' und benutzte es dann mit folgendem Befehl: '@convert $ $" "-scale 20%" \\ $ (Call replace, $ @) \' "' – iBelieve

+0

10 Sollte ich deine Antwort akzeptieren? Oder sollte ich meine eigene Antwort erstellen, die alles beschreibt, was ich getan habe, um es zum Laufen zu bringen, indem ich das fertige Makefile zeige? – iBelieve

Verwandte Themen