ubuntuusers.de

script zum senden von Datei aus bestimmtem Verzeichnis

Status: Gelöst | Ubuntu-Version: Ubuntu 7.10 (Gutsy Gibbon)
Antworten |

superDAU

Avatar von superDAU

Anmeldungsdatum:
3. September 2007

Beiträge: 384

Wohnort: Erkelenz

Hallo liebe Ubuntu-Users,

ich möchte verschiedene Systemnachrichten in einem Verzeichnis /var/news ablegen. Diese Dateien möchte ich per mail and den user "system" senden. Postfix ist natürlich schon eingerichetet. Dann kann ich die Infos per E-Mail Cyrus_IMAPD lesen und muss mich nicht mittels FreeNX am Server anmelden.

Das Script (über CRON angesteuert) soll folgendes tun:

▶ prüfe, ob eine Datei im Verzeichnis /var/news ist → falls nein → script beenden
▶ lese den Dateinamen der ersten Datei (nur die erste Datei, wie übergebe ich diese Information an die nächsten Schritte?)

ls -???


▶ sende die Datei an "system" (hoffe, das ist so richtig)

mail -s "news" system@addresse.de < /var/news(gerade gelesenen Dateinamen)


▶ lösche die gesendete Datei

rm /var/news/(gerade gelesene Datei)


▶ springe zum Anfang (prüfe, ob eine Datei ...)

Soweit meine Idee,
ich hoffe, Ihr könnt einem SuperDAU ein wenig helfen.

Danke
Christian

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4475

Wohnort: Göttingen

Wie wärs denn mit sowas?

#!/bin/bash
for line in /var/news/*; do
   mail -s "news" system@addresse.de < $line
   rm $line
done

Falls es ein kann, daß die Dateien Leerzeichen enthalnte, mußt Du die Dateien, glaube ich, noch in " einschließen, also "$line" verwenden, bin mir da aber nicht hundertpro sicher.

dakkar

Avatar von dakkar

Anmeldungsdatum:
1. Juni 2006

Beiträge: 282

hmm ich wuerde ein paar details anders machen:

#!/bin/bash
for line in /var/news/*; do
   cat $line | mail -s "news" system@addresse.de &&  rm -f "$line"
done

wichtig ist in meine augen das &&. in diesem fall wird das rm NUR DANN ausgefuehrt, wenn der mailversand erfolgreich war. waer doof wenn da was schiefgeht und dann auch noch das log weg ist.
bei dem mail waere es interessant zu wissen, was dud a genau haben willst. soll das log als attchment mitkommen? oder einfach im body der mail stehen?

dakky

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4475

Wohnort: Göttingen

Besten Dank für den Hinweis. War schon ein bißchen böser Fehler von mir. Naja, man lernt nie aus...

MrKanister

Anmeldungsdatum:
13. Oktober 2007

Beiträge: 2105

Doc_Symbiosis hat geschrieben:

Falls es ein kann, daß die Dateien Leerzeichen enthalnte, mußt Du die Dateien, glaube ich, noch in " einschließen, also "$line" verwenden, bin mir da aber nicht hundertpro sicher.

Das wird nicht helfen, da "for" schon anhand der IFS (also auch an Leerzeichen) trennt.

Warum das simple Umgehen dieses Problems mit "while" so unbekannt zu sein scheint, ist mir schleierhaft 😉

find /var/news/ -mindepth 1 -maxdepth 1 | while read line
do
     cat "$line" | mail -s "news" system@addresse.de &&  rm -f "$line"
done

Gruß Martin

Pommes

Avatar von Pommes

Anmeldungsdatum:
23. Februar 2008

Beiträge: 53

Mr. Kanister hat geschrieben:

Das wird nicht helfen, da "for" schon anhand der IFS (also auch an Leerzeichen) trennt.

Wenn zuvor

IFS="
"

gesetzt wird, wird nur noch nach Zeilenumbrüchen getrennt.

MrKanister

Anmeldungsdatum:
13. Oktober 2007

Beiträge: 2105

@Pommes:
Aber wozu die IFS manipulieren, wenns auch ohne geht 😉

BTW: Ich muss mich leicht korrigieren:
Wenn man das Globbing der Shell verwendet, um Argumente für die for-Schleife zu sammeln, dann funktioniert es, da die Shell die Leerzeichen escaped:

for i in ./*
...

In allen anderen Fällen sollte man aber die while-Schleife vorziehen, da in Kombination mit "find" auch eine sehr genaue Einschränkung der Quelldaten möglich ist.

Hier gibt es sogar einen Thread nur über die IFS-Variable
▶ http://forum.ubuntuusers.de/topic/149126/

superDAU

(Themenstarter)
Avatar von superDAU

Anmeldungsdatum:
3. September 2007

Beiträge: 384

Wohnort: Erkelenz

Danke für Eure Hilfe!!!

#!/bin/bash 

find /var/news/ -mindepth 1 -maxdepth 1 | while read line
do
     cat "$line" | mail -s "$line" system@mail-adresse.de &&  rm -f "$line"
done

So habe ich es gerade erfolgreich getestet. Egal ob die Dateinamen Leerzeichen enthalten oder nicht, es funktioniert.

Besten Dank

Antworten |