Hallo Bernd,

mit 'perl' und 'sed' es immerhin vorerst für eine datei hingekriegt. Muss
noch das erweitern, damit das programm alle .odt dateien in einem
verzeichnis abarbeitet:

#!/usr/bin/perl
system ("unzip -p harman_hisbo_15.odt meta.xml > meta.txt");
system (q@sed 's/[^A-Za-z0-9_.;]//g' meta.txt > meta2.txt@);
open(INPUT, '<', 'meta2.txt');
open(OUTPUT, '>', 'date.txt');
$date = <INPUT> =~ m/dcdate\d{8}/g;
print OUTPUT <INPUT> =~ m/dcdate\d{8}/g;
close INPUT;
close OUTPUT;
system (q@sed 's/[a-z]//g' date.txt > date2.txt@);
open(INPUT, '<', 'date2.txt');
$newdate = <INPUT>;
system ("touch -d $newdate harman_hisbo_15.odt");

Ein paar Erläuterungen:
-- unzip braucht nicht die datei richtig zu entpacken, er holt sich die
eine datei "meta.xml" direkt aus der .odt und packt diese in "meta.txt"
-- das seltsame "q@ ..... @" dient dazu, alles, was sich zwischen den
beidne @ befindet auszuführen, ohne zu interpretieren, also stolpert das
programm hier nicht über irgendwelche sonderzeichen
-- das "^" als verneinung bedeutet, entferne alles außer normale buchstaben
und ziffern
-- ich musste sed deswegen zweimal aufrufen, das erste mal, um die kette
"dcdate01234568" rauszuholen, und das zweite mal um die gleiche kette ohne
das "dcdate" zu erhalten, denn openoffice hat zwei datums, ein datum für
die erstmalige speicherung der datei, und ein zweites datum für die letzte
speicherung. diese ist natürlich das interessantere
-- touch funktioniert problemlos mit der variable "$newdate"

Sobald ich es mit einem ganzen Verzeichnis geschafft habe, melde ich mich
wieder.

Beste Grüße
Dave

On Sat, 24 Dec 2022 at 14:14, Dave <davepo...@gmail.com> wrote:

> Danke dir Bernd!
>
> Sieht sehr sehr gut aus. Ich bin allerdings etwas langsam und werde etwas
> zeit brauchen, um das zu verstehen. ich glaube du könntest etwas werbung
> für dein programm machen, denn es gibt da draußen sicherlich weitere
> menschen, die davon profitieren würden.
>
> Frohe Weihnachten!
>
> On Fri 23. Dec 2022 at 21:37, Bernd Obermayr <li...@bobermayr.de> wrote:
>
>> Am 23.12.22 um 21:10 schrieb Dave:
>> > Das ist echt super, danke euch Bernd und Matthias. Jetzt habe ich was zu
>> > knabbern über Weihnachten :)
>> >
>> Ja, Danke .)
>>
>> Habs nochmal etwas überarbeitet und kommeniert
>>
>> -----8<---------
>> #!/bin/bash
>> help() {
>>
>>     echo "$0
>>
>>     Script um das Datum einer OpenDocument-Datei (*.odt|*.ods, etc) auf
>> das
>>     in den Meta-Daten (Eigenschaften) der Datei gespeicherte Datum
>>     festzulegen.
>>     OpenDocument-Datei sind gezipte Archive. In der Datei meta.xml aus dem
>>     Archiv sind die meta-Daten enhalten, so auch das Erstell- und
>> Speicherdatum.
>>
>>     Syntax: $0 <Dateiname> [Modus]
>>         Modus:
>>          -g setze filedate auf Änderungsdatum Standard
>>          -e Setze filedate auf Erstelldatum.
>>     $1
>>
>>     23.12.2022 bernd obermayr
>>     "
>>     exit 0
>> }
>> if [ X$1 = "X" -o  "X$1" = "X-h" ]; then
>>  help
>> fi
>> if [ X$1 = "X" -o ! -f "$1" ]; then
>>  help "       Fehler: Die Datei $1 existiert nicht"
>> fi
>> ## temporäres Verzeichnis erstellen
>> tmp1=$(mktemp -d /tmp/$(basename ${0})_XXXXXX)
>>
>> ## aktuellen Pfad merken
>> orgPath=`pwd`
>> file="${orgPath}/$1"
>> ## ins temporäre Verzeichnis wechseln
>> pushd $tmp1
>> ## Die Datei hier entpacken
>> unzip "$file"
>>
>> ## standard, setze filedate auf Änderungsdatum
>> if [ "X$2" = "X-g" -o "X$2" = "X" ]; then
>>     cdate=$(xmlstarlet sel -t -v "//dc:date" meta.xml)
>>     echo "$file change-date=$cdate"
>>     touch -d $cdate "$file"
>> fi
>>
>> ## setze filedate auf Erstelldatum
>> if [ "X$2" = "X-e" ] ;then
>>     cdate=$(xmlstarlet sel -t -v "//meta:creation-date" meta.xml)
>>     echo "$file creation-date=$cdate"
>>     touch -d $cdate "$file"
>> fi
>>
>> ## zurück ins Startverzeichnis
>> popd
>> ## das tmp Verzeichnis wird nicht mehr gebraucht, also löschen
>> rm -rf $tmp1
>> -----8<---------
>>
>> Ich hoffe, das hilft. Sonst frag einfach :)
>>
>> --
>> Gruss
>>   Bernd
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
>> For additional commands, e-mail: users-de-h...@openoffice.apache.org
>>
>>

Reply via email to