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

Re: Mal wieder find...



On 2004.02.29 16:10, Jan Trippler wrote:
Am Sonntag, 29. Februar 2004 11:30 schrieb Andreas Schmidt:
[...]
> Im konkreten Fall ging es darum, in einem Verzeichnis aus allen
> Mailboxen bestimmte Header zu entfernen. Ich hatte dafuer eine
> provisorische ~/.procmailrc angelegt (da die Mails ja schon
> sortiert
>
> waren, konnten die sonst faelligen Filter entfallen) :
> :0f
> :
> | formail -f -I Received: -I Envelope-to: -I Delivered-To:
> |
> :0
> mist

Das schiebt die Mails doch in ein Postfach mist - und der liegt im
Verzeichnis $MAIL, oder?

Das ist es nicht...hab eben mal ein "touch /var/mail/mist" gemacht, aendert aber nichts an der Fehlermeldung. Ebensowenig eine Aenderung des Pfades zu "mist" ins aktuelle Verzeichnis...

> Ich wollte jetzt fuer jede gefundene Mailbox procmail aufrufen
> und die Datei "mist" umbenennen:
>
> find . -maxdepth 1 -type f -exec "cat {} | formail -s procmail;
> mv mist {}.new" \;
>
> Hier gibt es dann die Fehlermeldung:
> find: cat ./header | formail -s procmail; mv mist ./header.new:
> No such file or directory

s. o. - wahrscheinlich wird mist im aktuellen Verzeichnis nicht
gefunden.

Das ist richtig. Habe jetzt mal am Anfang der .procmailrc "VERBOSE=on" gestellt und Logging aktiviert. Dann den Teil mit mv weggelassen:
find . -maxdepth 1 -type f -exec "cat {} | formail -s procmail" \;
find: cat ./header | formail -s procmail: No such file or directory

Die Logdatei wird nicht angelegt, was darauf hindeutet, dass formail ueberhaupt nicht ausgefuehrt wird. Kann es sein, dass find den gesamten String "cat ./header | formail -s procmail" als Dateinamen ansieht?

> find . -maxdepth 1 -type f -exec cat \{\} | formail -s procmail;
> mv mist \{\}.new \;
>
> ergibt
> find: missing argument to `-exec'
> mv: missing file argument

Jepp - da Du die Befehlefolge nicht quotest, wird nur der Teil:
cat \{\} für exec erkannt - und da fehlt eben das \; am Ende. Die
Pipe gehört hier schon nicht mehr zum find.
Ist nachvollziehbar. Aber wenn ich quote, wird der Dateiname nicht gefunden...

> prune () { cat "$1" | formail -s procmail; mv mist "$1.new"; };
> export prune; find . -maxdepth 1 -type f -exec "prune {}" \;
> find: prune ./header: No such file or directory

Kann es sein, dass der Konstrukt "prune {}" als _ein_ Kommando
aufgefasst wird? Versuchs hier doch mal ohne "" - so wie oben.

prune() { cat $1 | formail -s procmail; }; export prune; find . - maxdepth 1 -type f -exec prune {} \;
find: prune: No such file or directory

exec mag wohl keine Shell-Funktionen...

Ich glaube. mit einem Shell-Script statt einer Funktion hättest Du
weniger Sorgen.
War halt nur ein quick'n'dirty hack. :-) Aber Du hast recht, die Funktion in ein Script gepackt wird ausgefuehrt. Und wenn man '"$1"' mit '"$*"' ersetzt, werden sogar Dateinamen mit Leerzeichen richtig erkannt. Letztlich sieht es also wohl danach aus, dass man find wirklich nur ein einzelnes Kommando direkt ausfuehren lassen kann. Aeusserst unpraktisch, wenn man in solchen Faellen jedesmal erst ein eigenes Script schreiben muss...

Schoenen Gruss,

Andreas



Reply to: