Dies ist mein erster Beitrag hier. Ich habe mich angemeldet, weil ich gerade anfange, mein erstes Skript zu schreiben. Ich bin absoluter Anfänger und habe alles bisher irgendwo zusammen geklaut. Aber so kommt man natürlich nicht weit, daher bin ich jetzt hier.
Das Problem: Ich habe eine Fotosammlung, die aus *.RAW-Dateien besteht, sowie aus mittels UFRAW entwickelten *.ufraw-Dateien. Letztere sind xml-Dateien und sehen folgendermaßen aus:
Code: Alles auswählen
<?xml version="1.0" encoding="utf-8"?>
<UFRaw Version='7'>
<InputFilename>H:\Fotos\user\201408_Mallorca\P1070267.RAW</InputFilename>
<OutputFilename>H:\Fotos\user\201408_Mallorca\P10702672.jpg</OutputFilename>
<WB>Manual WB</WB>
<WBFineTuning>0</WBFineTuning>
<Temperature>9295</Temperature>
<Green>1.120</Green>
<ChannelMultipliers>2.8544 1.0000 1.1334 1.0000</ChannelMultipliers>
<LensfunAuto>no</LensfunAuto>
<Exposure>0.747826</Exposure>
<Saturation>0.000000</Saturation>
<OutputType>4</OutputType>
<CreateID>1</CreateID>
<ProgressiveJPEG>1</ProgressiveJPEG>
<Compression>78</Compression>
<BaseManualCurve Current='yes'>
<AnchorXY>0.000000 0.000000</AnchorXY>
<AnchorXY>0.254902 0.183246</AnchorXY>
<AnchorXY>1.000000 1.000000</AnchorXY>
</BaseManualCurve>
<ManualCurve Current='yes'>
<AnchorXY>0.113725 0.000000</AnchorXY>
<AnchorXY>0.403922 0.544503</AnchorXY>
<AnchorXY>0.435294 1.000000</AnchorXY>
</ManualCurve>
<MatrixInputProfile Current='yes'>Color matrix
</MatrixInputProfile>
<sRGBOutputProfile Current='yes'>sRGB
</sRGBOutputProfile>
<Make>Panasonic</Make>
<Model>DMC-FZ50</Model>
<Timestamp>Wed Aug 20 13:15:22 2014</Timestamp>
<Orientation>0</Orientation>
<ISOSpeed></ISOSpeed>
<Shutter>1/100 s</Shutter>
<Aperture>F4</Aperture>
<FocalLength>33.8 mm</FocalLength>
<FocalLength35></FocalLength35>
<EXIFSource>exiv2 0.23</EXIFSource>
<Crop>0 0 3672 2748</Crop>
<AspectRatio>1.336245</AspectRatio>
<Rotation>0.000000</Rotation>
<Log>
ufraw_open: w:3672 h:2748 curvesize:0
EXIF data read using exiv2, buflen 256
Scaling with darkness 0, saturation 4095, and
multipliers 1,000000 0,486137 0,711645 0,486137
Loading Panasonic DMC-FZ50 image from H:\Fotos\user\201408_Mallorca\P1070267.RAW ...
Black: 0, Maximum: 4095
AHD interpolation...
</Log>
</UFRaw>
Code: Alles auswählen
<InputFilename>../Originale/P*******.RAW</InputFilename>
Ich habe es zuerst mit sed versucht, komme da aber immer mit der Maskierung durcheinander. Außerdem habe ich die Nummerierung teilweise scheinbar falsch übernommen, so dass ein Zeichen fehlte, und die Schleife rekursiv durch alle Unterordner bekomme ich auch noch nicht zum Laufen ... Mir ist aber bei meiner Suche xmlstarlet begegnet, was viele als ideal für solcherlei Aufgaben bezeichnen. Leider habe ich es damit noch weniger geschafft.
Hier trotzdem mal mein erster Versuch:
Code: Alles auswählen
#!/bin/bash
#Variablendefinition
WORKDIR=Abzuege
cd $WORKDIR
for i in *.ufraw
do
ZEILE3=$(head -n3 "$i" | tail -1l)
echo " alter Pfad:" $ZEILE3
LAENGE=$(head -n3 "$i" | tail -1l | wc -m)
NAME=$(echo $ZEILE3 | cut -c $(( ($LAENGE-28)))-$(( ($LAENGE-21) )) )
echo " RAW-File: " $NAME
sed -i '/^<InputFilename/d' "$i"
sed -i "3i\ <InputFilename>../Originale/$NAME.RAW</InputFilename>" "$i" # vor der neuen dritten Zeile wird eine neue Zeile eingefügt
ZEILE3=$(head -n3 "$i" | tail -1l)
echo " neuer Pfad:" $ZEILE3
echo
done