[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT, total] alte Mails der Liste per Script intelligent innerhalb Maildir verschieben?



Am 2008-11-26 10:28:01, schrieb Tobias Nissen:
> Matthias Haegele wrote:
> > Habe noch alte Mails der Liste von 2006 und 2007 die könnte ich
> > natürlich jetzt von Hand einfach nach Jahreszahl z.B. in einen
> > Unterordner debian-2006 verschieben, dabei gingen aber natürlich die
> > Threads verloren, was ich nicht möchte,
> 
> Ist das nicht zu perfektionistisch gedacht? Ich habe mir darüber auch
> damals[0] Gedanken gemacht, aber das hat doch keinen echten Mehrwert,
> oder?

Inwiefern?

Ich bin am programmieren eines PostgreSQL und GTK2+ basierenden MUA  und
wenn ich LIMIT zu 2007-10 setze, will ich alles angezeigt haben, was  im
Oktober relevant war.  Dazu  gehören  aber auch  Fäden  die  im  Oktober
angefangen haben, aber im November endeten.

Nun, ist nicht gerade easy zu programmieren, speziell wenn man  dann  in
einer Tabelle 300.000 Messages hat, aber es geht...

> Ich halte ja auch viel von Shell-Programmierung, aber es wird doch
> manchmal Zeit loszulassen und eine richtige Sprache zu nehmen :-) Du
> kommst bei der Problemstellung nicht drum herum, die Threadbäume einmal
> von Hand zu erstellen, weil nicht alle Clients _alle_ References in den
> Headern mitführen.

Nunja, ich habe das gerade mal ausprobiert...
Für den Monat Oktobr benötigt es über eine Stunde auf nem IBM TP570  mit
366 MHz und 192 MByte Speicher

Alls erstes muß er alle E-Mails in zwei datei-tabelle schreiben wofür er
am besten noch Maildir verwenden muß...

----[ 'table1' ]--------------------------------------------------------
<dateiname> <tab> <YYYY> <tab> <Message-ID>
------------------------------------------------------------------------

----[ 'table1' ]--------------------------------------------------------
<dateiname> <tab> <References>
------------------------------------------------------------------------

das läßt sich mit einem kleinen BaSH Script  und  formail  sehr  schnell
erstellen:

----8<------------------------------------------------------------------
#!/bin/bash

(cd ${HOME}/Maildir/cur/ && ls *S) |
while read LINE
do
  # Ich verwende als Datum den Recived: Header, weil
  # ich im mehr vertraue, als dem Date: des senders
  RFC_DATE=$(formail -czx Received: <${LINE} |head -n1 |sed -e 's|.*; ||' |sed 's|^ ||g' |cur -d ' ' -f1-6)
      YEAR=$(date --date="${RFC_DATE}" +%Y)
     MSGID=$(formail -czx Message-ID: <${LINE})
      REFS=$(formail -czx References: <${LINE})
  if [ -z "${MSGID}" ]
  then
    MSGID="none"
  fi
  echo "${LINE}	${YEAR}	${MSGID}" >>table1
  echo "${LINE}	${REFS}"          >>table2
done
----8<------------------------------------------------------------------

Danach mit

----8<------------------------------------------------------------------
(cat table1) |
while read LINE
do
  FILE=$(echo "${LINE}" |cut -d '	' -f1)
  YEAR=$(echo "${LINE}" |cut -d '	' -f2)
    ID=$(echo "${LINE}" |cut -d '	' -f3)

  mv ${FILE} ${HOME}/Maildir_archive/.${YEAR}/cur/
  FILES=$(grep "${ID}" table2)
  for MOVE in ${FILES} ; do
    MOVE_FILE=$(echo "${MOVE}" |cut -d '	' -f1)
    mv ${MOVE_FILE} ${HOME}/Maildir_archive/.${YEAR}/cur/
  done
done
----8<------------------------------------------------------------------

Das ist getestet und funktioniert...

Thanks, Greetings and nice Day/Evening
    Michelle Konzack
    Systemadministrator
    24V Electronic Engineer
    Tamay Dogan Network
    Debian GNU/Linux Consultant


-- 
Linux-User #280138 with the Linux Counter, http://counter.li.org/
##################### Debian GNU/Linux Consultant #####################
Michelle Konzack   Apt. 917                  ICQ #328449886
+49/177/9351947    50, rue de Soultz         MSN LinuxMichi
+33/6/61925193     67100 Strasbourg/France   IRC #Debian (irc.icq.com)

Attachment: signature.pgp
Description: Digital signature


Reply to: