xml-Dateien aus Vorlage erzeugen mit Filmnamen aus Liste

M

Matt01

Neues Mitglied
Thread Starter
Dabei seit
13.12.2014
Beiträge
12
Reaktionspunkte
0
Hallo liebe MY-Experten, ich habe folgende Herausforderung und würde mich freue, wenn mir jemand mit einer Lösung (z.B. Apple Script oder vielleicht ja auch Automator) helfen könnte:

ich muss eine große Anzahl von xml-Dateien erzeugen (mehrere Tausend), die alle den gleichen Inhalte haben (eine Vorlage). Diese Dateien müssen jeweils bestimmte Filenamen haben, die alle in einer txt oder cvs vorliegen. Gibt es eine Möglichkeit, die Dateien automatisch mit dem richtigen Namen zu generieren.

Ich würde mich über eine Hilfe sehr freuen.

Mit bestem Dank im Voraus!!
 
Hallo,

das geht relativ einfach mit einem Shellscript:

Code:
[FONT=courier new]#!/bin/bash

# Zu duplizierende Datei:
file="/Pfad/Datei.xml";
# In den Ordner mit der Datei wechseln:
cd "$(dirname "$file")";
while read line;
do
# Datei kopieren:
    cp "$(basename "$file")" "$line";
done<"/Pfad/filenames.txt" # Pfad zur Textdatei[/FONT]
 
Vielen herzlichen Dank schon einmal! Leider hänge ich etwas (bin Laie).
ich muss doch eigentlich nur "/Pfad/Datei.xml" (also den Pfad zu kopierenden Datei) und den Pfad zur der txt mit den Filenamen (/Pfad/filenames.txt) angeben bzw. in dem Script ersetzen, oder??
 
Hm, muss ich mal weiterfummelnd, funktioniert irgendwie nicht.. das ist mein Ergebnis im Terminal aber leider ohne Erfolg:
Last login: Sat May 30 18:48:22 on ttys000
MacBook-Pro:~ MR$ #!/bin/bash
MacBook-Pro:~ MR$
MacBook-Pro:~ MR$ # Zu duplizierende Datei:
MacBook-Pro:~ MR$ file="TESTORDNER/0890007958S.xml";
MacBook-Pro:~ MR$ # In den Ordner mit der Datei wechseln:
MacBook-Pro:~ MR$ cd "$(dirname "$file")";
MacBook-Pro:TESTORDNER MR$ while read line;
> do
> # Datei kopieren:
> cp "$(basename "$file")" "$line";
> done<"/TESTORDNER/xml.txt" # Pfad zur Textdatei


was mache ich falsch?
 
Irgendetwas scheine ich falsch zu machen... das gibt meine Eingabe im Terminal.... aber ohne Erfolg:
Last login: Sat May 30 18:48:22 on ttys000
MacBook-Pro:~ MR$ #!/bin/bash
MacBook-Pro:~ MR$
MacBook-Pro:~ MR$ # Zu duplizierende Datei:
MacBook-Pro:~ MR$ file="TESTORDNER/0890007958S.xml";
MacBook-Pro:~ MR$ # In den Ordner mit der Datei wechseln:
MacBook-Pro:~ MR$ cd "$(dirname "$file")";
MacBook-Pro:TESTORDNER MR$ while read line;
> do
> # Datei kopieren:
> cp "$(basename "$file")" "$line";
> done<"/TESTORDNER/xml.txt" # Pfad zur Textdatei



 
Der 2. Pfad stimmt bei dir nicht (?) Der korrekte Pfad sollte "/Users/MR/TESTORDNER/xml.txt" sein.
 
@Pill, er hackt das direkt ins Terminal... :p

Dann als Einzeiler:
Code:
file="TESTORDNER/0890007958S.xml" && cd "$(dirname $file)" && while read line; do cp -v "$(basename $file)" "$line"; done <"xml.txt"
 
Hab ich gemerkt, sollte aber auch mit den Zeilenumbrüchen funktionieren.
 
Bei mir schon
 
Einzeiler funktioniert leider auch nicht...
 
Ich hab dir das mal in ein AppleScript verpackt, dann stimmen die Pfad in jedem Fall:

Code:
[B]set [/B][COLOR=#4F8F00][FONT=Verdana]theFile [/FONT][/COLOR][B]to[/B][FONT=Verdana] ([/FONT][COLOR=#012FBE][FONT=Verdana][B]choose file [/B][/FONT][/COLOR][COLOR=#012FBE][FONT=Verdana]with prompt[/FONT][/COLOR][FONT=Verdana] "Wählen Sie die zu duplizierende Datei aus:")
[/FONT][FONT=Verdana][B]set[/B] [COLOR=#4f8f00]theText[/COLOR] [B]to[/B] ([COLOR=#012fbe][B]choose file[/B][/COLOR] [COLOR=#012fbe]with prompt[/COLOR] "Wählen Sie die Textdatei aus:")[/FONT]
[FONT=Verdana]
[/FONT]
[FONT=Verdana][COLOR=#012fbe][B]do shell script[/B][/COLOR] "file=\"" & [COLOR=#812fdc]POSIX path[/COLOR] [B]of[/B] [COLOR=#4f8f00]theFile[/COLOR] & "\";[/FONT]
[FONT=Verdana]cd \"$(dirname \"$file\")\";[/FONT]
[FONT=Verdana]while read line;[/FONT]
[FONT=Verdana]do[/FONT]
[FONT=Verdana]    cp \"$(basename \"$file\")\" \"$line\";[/FONT]
[FONT=Verdana]done<\"" & [/FONT][COLOR=#812FDC][FONT=Verdana]POSIX path [/FONT][/COLOR][B]of [/B][COLOR=#4F8F00][FONT=Verdana]theText[/FONT][/COLOR][FONT=Verdana] & "\""[/FONT]

Das Skript in den Script-Editor kopieren und ausführen, dann kannst du die Dateien auswählen. Sollte es dann immer noch nicht funktionieren, dann stimmt eventuell das Format der Textdatei nicht.
 
Vielen Dank erst einmal für deine Mühe!! leider klappt es nicht... duplizierende Datei und Textdatei auswählen klappt. Das war es dann aber auch schon.... der Skript-Editor gibt mir folgende Events aus:

tell application "Script Editor"
choose file with prompt "Wählen Sie die zu duplizierende Datei aus:"
choose file with prompt "Wählen Sie die Textdatei aus:"
end tell
tell current application
do shell script "file=\"/Users/MR/TESTORDNER/0890007958S.xml\";
cd \"$(dirname \"$file\")\";
while read line;
do
cp \"$(basename \"$file\")\" \"$line\";
done<\"/Users/MR/test.txt\""
end tell
Ergebnis:
""
ich habe für den Test eine ganz normale .txt erstellt. Zum Test nur einen Eintrag (123.xml).... wie müsste das Script denn für eine .csv angepasst werden? Sorry und herzlichen Dank für deine Mühe!
 
Das Skript scheint ordentlich durchzulaufen, zumindest wird kein Fehler ausgegeben. Eigentlich sollte sich jetzt ein Datei "123.xml" im Ordner "TESTORDNER" befinden.

Eine .csv-Datei ist letztlich auch nur eine Textdatei mit einem Trennzeichen zwischen den Werten, meist einem Semikolon. das sollte also keinen Unterscheid machen.
 
ja, eigentlich sollte die Datei sich in dem Ordner befinden, klappt aber leider nicht.... ich denke, du hast das getestet und bei dir funktioniert das. Bzgl. der cvs wollte ich nur wissen, ob an dem Script etwas umgestellt werden müsste... aber leider läuft es ja noch nicht...
trotzdem vielen Dank - auch im Voraus für eine weitere Info, solltest du noch eine Idee haben, woran es liegen kann
 
ich bin jetzt (komischerweise nur einem 2. Mac auf dem ich getestet habe) soweit, dass eine neue Datei erzeugt wird. leider ist das aber kein Duplikat der Quelldatei und auch nicht das entsprechende Format (auch ohne Suffix) und die Datei wird mit allen Namen benannt, die in dem txt-File stehen (z.B. 123.xml;456.xml als Dateinamen)... also die Quelldatei wird ignoriert und es wird nur eine Datei erzeugt. Unabhängig davon welches Trennzeichen ich in der txt oder auch cvs verwende...:-( hast du vielleicht noch eine Idee?
herzlichen Dank
 
die textdatei muss so aussehen:

datei1.xml
datei2.xml
datei3.xml

also 1 dateiname/zeile - mit csv geht das obige nicht, dann muss man "read" auf "read -d ';' " ändern.
Und mach aus "cp" mal "cp -v ", dann sieht man auch, was kopiert wird.
 
super, es klappt jetzt!! "cp -v" hat allerdings einen Fehler ergeben.
Umstellung auf csv hat leider nicht geklappt...müsste das so aussehen:

do shell script "file=\"" & POSIX path of theFile & "\";
cd \"$(dirname \"$file\")\";
while read -d;
do
cp \"$(basename \"$file\")\" \"$line\";
done<\"" & POSIX path of theText & "\""

und könnte ich dann eine ";"-trennung in einer cvs-Datei nutzen?

Nochmals ganz herzlichen Dank!!!
 
Code:
while read -d ';' line;
die csv darf halt keinen header haben

und
Code:
cp -v \"$(basename $file)\" \"$line\";
-v bringt eigentlich nix, wenn du das eh' als Applescript laufen lässt.
 
Zurück
Oben Unten