find -print0 | xargs -0 grep funktioniert unter Ubuntu 10.04 nicht wie erwartet

find -print0 | xargs -0 grep funktioniert unter Ubuntu 10.04 nicht wie erwartet

Ich habe ein etwas seltsames Problem.

Wenn ich ausführe:

find . -iname '*.php' -o -iname '*.pl' -o -iname '*.html' | xargs grep -i users

Ich erhalte eine Menge Fehlermeldungen für Dateinamen, die Leerzeichen enthalten, aber einige Dateien stimmen auch überein.

Wenn ich jedoch Folgendes versuche, damit Dateinamen mit Leerzeichen richtig behandelt werden, werden keine Übereinstimmungen zurückgegeben:

find . -iname '*.php' -o -iname '*.pl' -o -iname '*.html' -print0 | xargs -0 grep -i users

Was mache ich falsch? Der zweite Befehl sollte mir mindestens die gleichen übereinstimmenden Dateien zurückgeben wie der erste, aber ich erhalte keine Übereinstimmungen.

Antwort1

Und die Antwort lautet:

find . \( -iname '*.php' -o -iname '*.pl' -o -iname '*.html' \) -print0 | xargs -r0 grep -i users

Das funktioniert. Ich hatte es noch nicht gesehen, aber ein Kollege hat mir davon erzählt.

Antwort2

Sie benötigen print0 und xargs nicht, diese Funktionalität ist bereits in find integriert:

find . -iname "*.php" -o -iname "*.pl" -o -iname "*.html" -exec grep -i users {} + 

verwandte Informationen