... so jetzt für ein ganzes Verzeichnis:

#!/usr/bin/perl

my $indir = "/home/dave/openoffice_test/obtain_meta";
# read in all files from the directory
foreach my $filename ( glob  "$indir/*.odt" ) {
    print "$filename\n";
system ("unzip -p $filename 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 $filename");
}

On Sun, 25 Dec 2022 at 22:02, Dave <davepo...@gmail.com> wrote:

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

Antwort per Email an