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?
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
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
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