Posts Tagged ‘file’

Samstag, 9. November 2013

E-Mail-Adressen aus einer Textdatei auslesen und mit imapfilter in einen Unterordner verschieben

Seit ich ein Smartphone besitze, verschiebe ich mittels dem alle 5 Minuten per cron-Job auf meinem privaten Server laufenden imapfilter unwichtige E-Mails in Unterordner, damit ich mich auf die wesentlichen Mails konzentrieren kann.

Der grösste Unterordner in meinem privaten E-Mail-Account heisst „_UNPERSOENLICH“ und enthält all den Newsletter-Plunder, welchen man die Woche hindurch so zugeschickt erhält. Die imapfilter-Regel, welche die treffenden E-Mail-Absender herausfiltert und dorthin verschiebt, ist mittlerweile auf über 60 Zeilen (d.h. 60 Absenderadressen) angewachsen. In der imapfilter-Konfigurationsdatei sieht dies dann in etwa so aus:

...
messages = mbox.INBOX:contain_from('domain1.ch') +
           mbox.INBOX:contain_from('domain2.org') +
           mbox.INBOX:contain_from('user@domain3.com')
           ...
           mbox.INBOX:contain_from('userxy@domain112.com')
messages:move_messages(mbox['_UNPERSOENLICH'])
...

Heute habe ich mich dazu entschieden, diese E-Mail-Adressen aus der Konfigurationsdatei herauszulösen, in einer Textdatei zusammenzufassen (je eine E-Mail-Adresse pro Zeile) und dann imapfilter diese Textdatei einlesen zu lassen und die Absenderadressen in einer Schleife in meiner INBOX zu suchen und gegebenenfalls in den Unterordner zu verschieben.

Äusserst hilfreich war dabei die Hilfe, wie man Lua zu einem solchen Vorhaben bewegt (imapfilter setzt auf Lua auf): File Read In Lua?

Basierend auf dieser Antwort habe ich folgenden Code in meine imapfilter-Konfigurationsdatei aufgenommen:

...
function file_exists(file)
  local f = io.open(file, "rb")
  if f then f:close() end
  return f ~= nil
end

function lines_from(file)
  if not file_exists(file) then return {} end
  lines = {}
  for line in io.lines(file) do 
    lines[#lines + 1] = line
  end
  return lines
end
...
-- Unpersoenlich
local file = '../filters/private-unpersoenlich.txt'
local lines = lines_from(file)

for key,email in pairs(lines) do
--  print('line[' .. key .. ']', email)
  messages = mbox.INBOX:contain_from(email)
  messages:move_messages(mbox['_UNPERSOENLICH'])
end
...

Im Ordner oberhalb desjenigen Ordners, welcher die imapfilter-Konfigurationsdateien enthält (für jeden meiner Accounts existiert eine solche Konfigurationsdatei), gibt es nun einen Ordner filters, welcher momentan die Datei private-unpersoenlich.txt enthält.

Mit den obengenannten Funktionen und Konstrukten wird die Textdatei ausgelesen und in eine Lua-Tabelle (in anderen Programmiersprachen wohl als Array bezeichnet) gespeichert (lines_from(). Anschliessend gehe ich mit einem for-Loop durch die Tabelle, filtere den Absender (contain_from()) und verschiebe treffende E-Mail-Nachrichten in den Ordner „_UNPERSOENLICH“ (move_messages(mbox['_UNPERSOENLICH'])).

Tags: , , , , , , , ,
Labels: Linux

1 Kommentar | neuen Kommentar verfassen

Sonntag, 3. November 2013

(Aus dem Archiv) Extract single file from a tar.gz-Backup

Der vorliegende Artikel habe ich ursprünglich irgendwann einmal ab 2002 auf meinem damaligen Linux-Entwicklungsserver im Web publiziert. Da ich das bloggen erst 2005 entdeckt habe, waren die Tipps in einer grossen HTML-Seite untergebracht. Anlässlich einer Aufräumaktion auf dem Server habe ich mich entschieden, die „Perlen“ über meine heutige Kommunikationsplattform ins Web zu posaunen. Seitdem ich die Artikel verfasst habe, sind viele Tage ins Land gegangen — ob der Artikel noch Gültigkeit hat, entscheidet der geneigte Leser selber.

Recently, I accidentally deleted a vital file on my linux server. Thanks to my regular backups by mkcdrec I just needed to have a look for the backup CD. After googling a few minutes, I came out with the appropriate shell command to extract the desired file out of a gzipped tar-archive:

tar -xzv --file=/Volumes/CDrec-29.07.2005/sdb1._var.tar.gz ./www/partyguide/curl/config.txt

This command recreated the directory structure in the current working dir (make sure you’re not cd-ed into the CD mount point, otherwise it can’t write out).

Tags: , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen