Make und Leerzeichen in Dateinamen

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Make und Leerzeichen in Dateinamen

Beitrag von inne » 23.04.2019 11:17:18

Hallo,

gibt es einen Trick, dass dieses Makefile irgendwie mit Leerzeichen in Dateinamen umgehen kann?

Code: Alles auswählen


docs:=$(patsubst %.odt, %.pdf, $(wildcard *.odt))

all: $(docs)

%.pdf: %.odt
	@lowriter --convert-to pdf:writer_pdf_Export $<
	-exiftool -all= $(basename $<).pdf

upload:
	@echo Upload not implemented yet

Zuletzt geändert von Anonymous am 23.04.2019 11:28:39, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Make und Leerzeichen in Dateinamen

Beitrag von Meillo » 23.04.2019 11:23:52

Variablenexpansionen quoten!?

"$<"

... und ebenso die Kommandosubstitutionen.
Use ed once in a while!

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Make und Leerzeichen in Dateinamen

Beitrag von inne » 23.04.2019 11:35:34

Meillo hat geschrieben: ↑ zum Beitrag ↑
23.04.2019 11:23:52
Variablenexpansionen quoten!?

"$<"

... und ebenso die Kommandosubstitutionen.
Du nutzt selbst !?, was mir Unsicherheit deiner Antwort suggeriert. Ich bekomme es nicht hin.

Code: Alles auswählen

$ make
make: *** Keine Regel vorhanden, um das Ziel „"""Dokument“, 
  benötigt von „all“, zu erstellen.  Schluss.

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Make und Leerzeichen in Dateinamen

Beitrag von Meillo » 23.04.2019 12:13:16

inne hat geschrieben: ↑ zum Beitrag ↑
23.04.2019 11:35:34
Du nutzt selbst !?, was mir Unsicherheit deiner Antwort suggeriert.
Ja, weil ich derartiges noch nicht gebraucht habe. Auf meinem System haben die Dateinamen keine Leerzeichen. :-P

Ich bekomme es nicht hin.

Code: Alles auswählen

$ make
make: *** Keine Regel vorhanden, um das Ziel „"""Dokument“, 
  benötigt von „all“, zu erstellen.  Schluss.
Hat make(1) nicht eine Option, mit der man sich auflisten lassen kann, welche Befehle genau es tatsaechlich ausgefuehrt hat? Das koennte helfen.

Vielleicht muss man die Make-eigenen Variablen ($<) nicht quoten, weil Make das automatisch richtig macht und nur die Kommandosubstitution.

Versuche das Problem runterzubrechen, indem du z.B. vorerst mal die Kommandosubstitutionen rausnimmst, um diese Fehlerquelle zu eliminieren. Geht's dann? Dann ersetzt du mal $< durch einen Fixstring und schaust ob es dann geht. Dann nimmst du mal die Dateiendungsregel raus und versuchst es so. Debugging ist das schrittweise Entfernen und Einschraenken von moeglichen Fehlerquellen, um sich der tatsaechlichen Fehlerquelle anzunaehern.

Hast du mal auf Stackoverflow oder so nach dem Problem gesucht?
Use ed once in a while!

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Make und Leerzeichen in Dateinamen

Beitrag von inne » 23.04.2019 12:34:42

Das Problem liegt einfach darin, das die $(docs) zu Datei name.pdf zweier Datei name.pdf ersetzt wird.

Wie Quote ich innerhalb dieses Makefile am besten Leerzeichen in den Dateinamen, dann sollte es funktionieren...

Benutzeravatar
MSfree
Beiträge: 10776
Registriert: 25.09.2007 19:59:30

Re: Make und Leerzeichen in Dateinamen

Beitrag von MSfree » 23.04.2019 14:20:56

Leerzeichen in Datei- oder Verzeichnisnamen sind eine blöde Idee. Praktisch alle Wildcard-Mechanismen stolpern irgendwann darüber, weil sie das Leerzeichen als Trennzeichen zwischen zwei Worten interprätieren.

Ich habe bei Stackoverflow folgendes gefunden, das vielleicht ein wenig weiterhilft.
https://stackoverflow.com/questions/983 ... ith-spaces

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Make und Leerzeichen in Dateinamen

Beitrag von inne » 25.04.2019 10:28:44

Danke, aber das ist mir dann doch to much und ich bin dazu übergegangen die Dokumente umzubenennen. Z.B. von "Liste Einkauf" zu "Einkaufsliste" usw. Das ist bei machen gut, bei anderen eher suboptimal und manchmal tuts ja auch ein Bindestich.
Zuletzt geändert von Anonymous am 26.04.2019 10:51:28, insgesamt 1-mal geändert.

Benutzeravatar
detix
Beiträge: 1705
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Make und Leerzeichen in Dateinamen

Beitrag von detix » 25.04.2019 13:56:18

Vorschlag:
Das umbenennen der Dateien ist ja schon der einfachste Weg, wie wärs mit umbenennen vor der Bearbeitung und danach wieder ins Original zurückbenennen?
Zwei Listen sollten dafür reichen (geht vielleicht auch einfacher...):
1. eine Liste nur der Dateinamen mit Leerzeichen vom aktuellen Verzeichnis erstellen

Code: Alles auswählen

ls | sed -n '/ /p' >lz.txt
2. daraus eine 2te Liste mit den originalen Dateinamen und dahinter getrennt durch | die Dateinamen ohne Leerzeichen erstellen, das Trennzeichen selbst darf im Dateinamen natürlich nicht vorkommen!

Code: Alles auswählen

awk '{ printf($0"|"); gsub(/ /, ""); print $0 }' lz.txt >lz_olz.txt
Die Umbenennung erfolgt in einer kleinen Schleife:

Code: Alles auswählen

while read line; do
    lz=$(echo "$line" | awk -F'|' '{ print $1 }') # Dateinamen mit Leerzeichen
    olz=$(echo "$line" | awk -F'|' '{ print $2 }') # Dateinamen ohne Leerzeichen
    # mv "$lz" "$olz" # vor der Bearbeitung ausführen = Leerzeichen entfernen
    # mv "$olz" "$lz" # nach der Bearbeitung ausführen = ins Original zurückbenennen
done <lz_olz.txt
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Antworten