jens321: korrekte Befehlszeile für Linus-Grep gesucht.

Hallo!

Ich suche einen Befehl, der mir alle Dateien anzeigt, die ein bestimmtes Wort enthalten.

Der Suchebefehl soll rekursiv über alle Unterverzeichnisse gehen, aber nur Dateien durchsuchen, die die Dateiendung ".pl" haben.

Meine Verzeichnisstruktur sieht wie folgt aus

startverzeichnis
  unterverzeichnis1
    uv1_1
      uv1_1_1
      ...
    uv1_2
    ...
  unterverzeichnis2
  ...

Ich habe folgendes probiert:
grep -ril suchbegriff *

Das dauert aber ewig, ich denke, weil ich Unmengen von Bildern in den Unterverzeichnissen habe.

Ein grep -ril suchbegriff *.pl bzw grep -ril suchbegriff */*.pl bringt aber immer den Fehler "Datei oder Verzeichnis nicht gefunden"

Wie ist die richtige Befehlsstruktur?

Vielen Dank
Jens

  1. Moin jens321,

    Ich suche einen Befehl, der mir alle Dateien anzeigt, die ein bestimmtes Wort enthalten.

    Der Suchebefehl soll rekursiv über alle Unterverzeichnisse gehen, aber nur Dateien durchsuchen, die die Dateiendung ".pl" haben.

    Das sollte mit

      
    grep -R --include='*.pl' wort .  
    
    

    erreichbar sein.

    Wenn es komplizierter wird, du also mit einem einfachen Glob die Dateien nicht mehr beschreiben kannst, dann kannst du das auch mit find realisieren:

      
    find . -type f -and -name '*.pl' -print0 | xargs -0 grep wort  
    
    

    LG,
     CK

    1. Das sollte mit

      grep -R --include='*.pl' wort .

        
      Wunderbar, das klappt so!  
        
      Vielen vielen Dank!
      
  2. Wie ist die richtige Befehlsstruktur?

    grep beherrscht keine Dateisuche (*.pl wird vor grep von der shell - und ergo nicht von grep zu einer Dateiliste ausgewertet][¹]) . Deshalb: baue ein find davor, das kann das:

      
    find ./ -name "*.pl" -exec grep -il "test" {} \;  
    
    

    Liefert bei mir etwas wie:

    ./perl/test.pl

    Jörg Reinholz
    ---------
    ¹ Du kannst das mit echo *.pl testen.