Tach Leute. Hätte mal ne etwas dümmliche Frage: ich möchte alle Dateien in einem Verzeichnis versenden. Folgendes: cat /pfad/* | mail mail@irgendwo liefert nicht das nötige Ergebnis, weil dann alles in einer einzigen Mail ankommt. Ich möchte aber, daß ich pro Datei eine Mail kriege. Wie kann ich das erreichen? Danke. -- Andreas Feile www.feile.net
Andreas Feile wrote:
Tach Leute.
Hätte mal ne etwas dümmliche Frage: ich möchte alle Dateien in einem Verzeichnis versenden.
Es gibt keine dummen Fragen, nur dumme Antworten ;-) Zumal es sich hier immerhin schon um eine kleine Shell-Programmierung handelt.
Folgendes:
cat /pfad/* | mail mail@irgendwo
liefert nicht das nötige Ergebnis, weil dann alles in einer einzigen Mail ankommt. Ich möchte aber, daß ich pro Datei eine Mail kriege. Wie kann ich das erreichen?
for file in `ls /pfad/*`; do
cat $file | mail mail@irgendwo.tld
done
Eventuell kann es etwas anders sein, wenn Du nicht jede Datei in
diesem Verzeichnis versenden willst.
Dann müßtest Du Dir eine Dateiliste on the fly bauen, z.B. mit find:
find /pfad -type f -name
Danke.
Nichts zu danken und viel Spaß dabei, Thomas Michalka
On Mit, 16 Apr 2003 at 17:53 (+0200), Thomas Michalka wrote:
Andreas Feile wrote: [Dateien versenden]
liefert nicht das nötige Ergebnis, weil dann alles in einer einzigen Mail ankommt. Ich möchte aber, daß ich pro Datei eine Mail kriege. Wie kann ich das erreichen?
for file in `ls /pfad/*`; do cat $file | mail mail@irgendwo.tld done
*Useless use of ls award* ;-) for file in /pfad/*; do cat $file | mail mail@irgendwo.tld done MAn beachte auch hier wieder das Dilemma, wenn Dateien z. B. Leerzeichen beinhalten.
Eventuell kann es etwas anders sein, wenn Du nicht jede Datei in diesem Verzeichnis versenden willst. Dann müßtest Du Dir eine Dateiliste on the fly bauen, z.B. mit find:
find /pfad -type f -name
\ -exec mail mail@irgendwo.tld "{}" ";" Vielleicht muß man zwischen - exec und mail noch ein xargs einbauen, das weiß ich jetzt nicht so genau.
Ein exec ist Bestandteil des find, da kommt kein xargs dazwischen. man find man xargs Außerdem wird das wohl schiefgehen, weil Du im Gegensatz zum obigen Beispiel den Dateinamen als Argument an mail übergibst, nicht den Inhalt per Pipe an mail schickst. Quick & Dirty; find /pfad -type f -name suchmuster -print | while read f; do cat "$f" | mail mail@adresse.tld done Jan
Jan Trippler schrieb:
On Mit, 16 Apr 2003 at 17:53 (+0200), Thomas Michalka wrote:
for file in `ls /pfad/*`; do cat $file | mail mail@irgendwo.tld done
*Useless use of ls award* ;-) for file in /pfad/*; do cat $file | mail mail@irgendwo.tld done
Klar, die Shell expandiert * u.ä. ja ;-)
MAn beachte auch hier wieder das Dilemma, wenn Dateien z. B. Leerzeichen beinhalten.
Eventuell kann es etwas anders sein, wenn Du nicht jede Datei in diesem Verzeichnis versenden willst. Dann müßtest Du Dir eine Dateiliste on the fly bauen, z.B. mit find:
find /pfad -type f -name
\ -exec mail mail@irgendwo.tld "{}" ";" Vielleicht muß man zwischen - exec und mail noch ein xargs einbauen, das weiß ich jetzt nicht so genau.
Ein exec ist Bestandteil des find, da kommt kein xargs dazwischen. man find man xargs
Stimmt, wenn, dann xargs ohne -exec in find. Allerdings könnte es auch funktionieren, wenn xargs halt nur eine Datei und keine echte Liste als Argument bekommt. Das wäre dann ein Fall für den *Useless use of xargs award* ;-) Ich hatte mal einen recht subtilen Fall, da war mit -exec in find einfach nichts zu machen. Mittels xargs funktionierte es dann. Leider erinnere ich mich nicht mehr genauer daran.
Außerdem wird das wohl schiefgehen, weil Du im Gegensatz zum obigen Beispiel den Dateinamen als Argument an mail übergibst, nicht den Inhalt per Pipe an mail schickst.
Auch klar. Ich hatte eine Eingabeumleitung vergessen. Damit liest mail
von der angegebenen Datei. Damit dürften sogar Leerzeichen im
Dateinamen nichts mehr ausmachen, oder?
Also:
find /pfad -type f -name
Quick & Dirty; find /pfad -type f -name suchmuster -print | while read f; do cat "$f" | mail mail@adresse.tld done
So geht's natürlich auch - wie man sieht, führen viele Wege nach Rom :-)
Jan
Gruß, Thomas
On Wed, Apr 16, 2003 at 10:01:05PM +0200, Jan Trippler wrote:
*Useless use of ls award* ;-) for file in /pfad/*; do cat $file | mail mail@irgendwo.tld done
MAn beachte auch hier wieder das Dilemma, wenn Dateien z. B. Leerzeichen beinhalten.
kk@kris:/var/tmp/suse> touch "a b" kk@kris:/var/tmp/suse> touch "c d" for i kk@kris:/var/tmp/suse> for i in *
do echo $i done a b c d
Demnach: for i in /pfad/* do mail user@example.com < $i done Oder als Attachments mit Mutt: for i in /pfad/* do mutt -s "$i" -a "$i" user@example.com < /dev/null done Kristian
On Don, 17 Apr 2003 at 12:42 (+0200), Kristian Koehntopp wrote:
On Wed, Apr 16, 2003 at 10:01:05PM +0200, Jan Trippler wrote:
*Useless use of ls award* ;-) for file in /pfad/*; do cat $file | mail mail@irgendwo.tld done
MAn beachte auch hier wieder das Dilemma, wenn Dateien z. B. Leerzeichen beinhalten.
kk@kris:/var/tmp/suse> touch "a b" kk@kris:/var/tmp/suse> touch "c d" for i kk@kris:/var/tmp/suse> for i in *
do echo $i done a b c d
Ich meinte den cat.
Demnach:
for i in /pfad/* do mail user@example.com < $i done
Genau, so kann man das Problem umgehen, genauso ginge cat "$i" | mail mail@irgendwo.tld Jan
participants (5)
-
Andreas Feile
-
Jan.Trippler@t-online.de
-
Kristian Koehntopp
-
Peter Wiersig
-
Thomas Michalka