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