Re: Mal wieder find...
Hallo,
mein urspruengliches find-Problem ist zwar mittlerweile geloest worden;
allerdings haenge ich jetzt wieder fest und bleibe daher gleich hier im
Thread. :-)
Mit -exec oder auch -print0 | xargs kann man ja veranlassen, dass fuer
die von find gefundene Datei ein Kommando ausgefuehrt wird. Ich wollte
jetzt gleich mehrere Kommandos ausfuehren; habe zwar allerlei
Verrenkungen gemacht, aber irgendwie funktioniert das alles nicht so,
wie ich es mir vorgestellt habe. Ist das ueberhaupt moeglich?
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
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
find . -maxdepth 1 -type f -exec cat \{\} | formail -s procmail; mv
mist \{\}.new \;
ergibt
find: missing argument to `-exec'
mv: missing file argument
Auch nach bash-Regeln gueltige Listenkonstrukte funktionieren nicht:
find . -maxdepth 1 -type f -exec { cat "{}" | formail -s procmail; mv
mist "{}.new"; } \;
bash: syntax error near unexpected token `}'
Und
find . -maxdepth 1 -type f -exec \{ cat "{}" | formail -s procmail; mv
mist "{}.new"; \} \;
find: missing argument to `-exec'
mv: cannot stat `mist': No such file or directory
bash: }: command not found
Sowie:
find . -maxdepth 1 -type f -exec "{ cat {} | formail -s procmail; mv
mist {}.new; }" \;
find: { cat ./header | formail -s procmail; mv mist ./header.new; }: No
such file or directory
Darauf habe ich dann eine Shell-Funktion definiert:
prune() {
cat "$1" | formail -s procmail
mv mist "$1.new"
}
Der Aufruf dieser Funktion aus find funktioniert nicht:
find . -maxdepth 1 -type f -exec prune {} \;
find: prune: No such file or directory
Das liegt wohl daran, dass -exec eine eigene Shell oeffnet, in der
prune nicht definiert ist. Also im naechsten Schritt:
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
Jetzt bin ich mit meinem Latein am Ende und dankbar fuer jeden Hinweis. :-)
Schoenen Gruss,
Andreas
Reply to: