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 {} +