Jens17: Linux:alle Dateien listen, die einen bestimmten String enthalten

Hallo!

Ich weiß nicht viel von Linuxbefehlen und suche jetzt eine Möglichkeit, wie ich ein Verzeichnis rekursiv durchsuchen kann und mir alle Dateien (inkl. Verzeichnispfad) anzeigen lassen kann, die einen bestimmten String enthalten.

Also z.B.: möchte ich alle index.html-Dateien aufgelistet bekommen, die den String "<body>" enthalten.

Ich habe es mit grep probiert, aber da kann weiß ich nicht, wie ich ein Muster für die zu durchsuchenden Dateien angeben kann.

Vielen Dank,
Jens

  1. @@Jens17:

    nuqneH

    Ich weiß nicht viel von Linuxbefehlen und suche jetzt eine Möglichkeit, wie ich ein Verzeichnis rekursiv durchsuchen kann und mir alle Dateien (inkl. Verzeichnispfad) anzeigen lassen kann, die einen bestimmten String enthalten.

    find.

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  2. Moin,

    Ich habe es mit grep probiert, aber da kann weiß ich nicht, wie ich ein Muster für die zu durchsuchenden Dateien angeben kann.

    $ grep -rl Muster *  
    
    

    Wahlweise egrep für reguläre Expressionen.

    Grüße Marco

    --
    Ich spreche Spaghetticode - fließend.
  3. Also z.B.: möchte ich alle index.html-Dateien aufgelistet bekommen, die den String "<body>" enthalten.

    Fingerübung:
    user@host:/var/www$ grep -rR '<body>' * | cut -d':' -f1 | sort -u | grep index.html > liste.txt 2> /dev/null

    man grep, man cut, man sort zeigt, was das macht.

    Jörg Reionholz

  4. Mahlzeit,

    ich hab mir da vor öanger zeit ein Script gezimmert, was ich immer noch nutze. Geht zwar auch anders, aber funktioniert.

      
    #!/bin/sh  
      
    if [ $# -lt 2 ]; then  
            echo "Usage: search PATH STRING [FILES] [IGNORE[|IGONRE[|IGNORE ... ]]]"  
            exit  
    fi  
      
    if [ "$3" ]; then  
            FILE="$3"  
    else  
            FILE="*"  
    fi  
      
    if [ "$4" ]; then  
            find $1 -type f -iname "$FILE" -exec grep -E -n "$2" -H '{}' \; | cut -d':' -f1-2 | egrep -v "$4"  
    else  
            find $1 -type f -iname "$FILE" -exec grep -E -n "$2" -H '{}' \; | cut -d':' -f1-2  
    fi  
    
    

    Das Script liegt unter dem namen "search" im PATH und zeigt zu den Suchergebnissen die Zeilennummer zum Dateinamen an.
    FILES kann Wildcards enthalten, muss dann aber in Quotes stehen.

    --
    42
    1. Vielen Dank euch allen!