Martin Schmitt sagte:
> * [EMAIL PROTECTED] wrote/schrieb:
>
>> kann mir jemand schnell ein Beispiel geben
>> wie ich die find Option -exec benutze?
>> z.B. ich brauchs f�r grep, mv und cp.
>> .. da gabs doch auch was mit xarg...
>
> Ich mach das immer so: find / -name "foo" -type f | xargs grep "bar"
-exec grep "bar" {} \; hat das Problem, dass es den Dateinamen
nicht ausgibt. xargs k�nnte bei der letzten Datei das Problem
auch haben (wenn nur noch eine Datei zu bearbeiten ist). Als
Abhilfe kann man "| xargs grep 'bar' /dev/null" nehmen. Dann werden
immer mindestens zwei Dateien durchsucht...
Eine nette Option ist noch -ok, das funktioniert wie -exec, nur
dass vor dem Start des Befehls nachgefragt wird.
Performance: -exec startet das Programm (hier grep) f�r jede
gefundene Datei, xargs nur so viele, dass die Kommandozeile
nicht �berl�uft. Die Alternative
grep "bar" $(find . -name "foo")
kann ein "Command line too long" verursachen, deshalb der xargs.
> Es geht auch mit "-exec", aber ich habe da noch keine "merkbare"
> Erkl�rung bekommen, welche Zeichen auf welche Weise escaped werden
> m�ssen. Anstatt da lange rumzugr�beln, nehme ich immer xargs.
Der Befehl hinter -exec wird mit ";" abgeschlossen. Das w�rde die
Shell fressen (Probiere "echo a; echo b"), daher ein \ davor.
Das ist eigentlich alles.
Die xargs L�sung geht schief, wenn Du einen Dateinamen mit
einem Linefeed im Namen hast. GNU find hat daf�r die Option
-print0 und xargs die Option -0. Damit werden die Dateinamen
durch Hex-0 getrennt, und das kann in keinem Dateinamen enthalten sein.
Jochen
--
This space is intentionally left blank.
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org