• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] datei-inhalte durchsuchen

pumix

Newbie
hi zusammen

ich würde gerne ein verzeichnis (inkl. unterverzeichnisse) durchsuchen, um einen bestimmten dateiinhalt zu finden. ich suche z.b. die funktion start().

habe es mit grep versucht:

grep -R "start(" *.php

nun sollten alle php-files in allen unterverzeichnissen abgesucht werden, bis die function gefunden wird. aber es geht nicht.

wie kann ich diese suche mit linux von der konsole aus machen?

danke für eure hilfe

gruss
janosh
 
Moin pumix,

ich bin mir nicht sicher, aber müßtest Du die öffnende Klammer nicht mit einem / also einem slash maskieren?
 

scg

Hacker
pumix, was kommt denn für ein Meldung ?

Ich meine das *.php ist das Problem.

Normalerweise kann man mit -f einen Dateinamen angeben.
 
OP
P

pumix

Newbie
vielen dank für die antworten.

die eher komplizierte zeile (ich schnall sie nicht wirklich) von ohweh funktioniert tadellos. allerdings muss man dann wirklich bei der suche gewisse zeichen maskieren. aber nicht mit slash, sondern mit backslash \.

ich hab jetzt einfach ein shell-script daraus gemacht. der paramter kann dann mit $1 übernommen werden.

gruss
janosh
 

ohweh

Newbie
pumix schrieb:
vielen dank für die antworten.

die eher komplizierte zeile (ich schnall sie nicht wirklich) von ohweh funktioniert tadellos...

Na dann will ich kurz das ganze erklären. :)

suche im aktuellen Verzeichnis (das ist der Punkt),

nur nach "normalen" Dateien (file), also kene Verzeichnisse, Links, etc

sollte klar sein, Dateien mit der Endung .php

erklär ich später :)

Der find Befehl sucht also alle php Dateien und jetzt wurd an grep gepiped.
Das kann man allerdings nicht direkt machen. Denn sinst würdest du nur die Dateinamen durchsuchen aber nicht den Dateiinhalt. Klar?

| xargs -0 grep ...
Jetzt kommt die geniale Pipe nach xargs. :)
xargs setzt jetzt die gefundenen Dateien als Argumente für grep ein.

Bsp:
find findet die Dateien:
./a.php
./b.php
./c.php

xargs macht daraus:
grep "start(" ./a.php ./b.php ./c.php

-print0 brauchst du falls Dateien mit Leerzeichen vorkommen, xargs muss dann entsprechend mit -0 aufgerufen werden.

Schwierige Geschichte. :)
Ohweh
 

deac

Member
wenn du bei dem find hinten noch ein -print anhängst, siehst du auch den filenamen:

find . -type f -name "*.php" -exec grep "start()" {} \; -print
 

rethus

Advanced Hacker
Wie kann ich diesen Befehl denn in ein Schelscript packen, das ich den mit entsprechenden Parametern aufrufen kann?

Hier mein Ansatz, geht aber so noch nicht:
Code:
#/bin/bash
find . -type f -name $1 -exec grep $2 {} \; -print
 
Oben