Dateien durchsuchen

Hallo,

bei Linux gibt es doch einen Befehl, der alle Dateien in einem Verzeichnis (evtl. auch Unterverzeichnisse) nach einem bestimmten String durchsucht, oder?
Kann mir den mal jemand nennen?

Gruß
Jochen

der Befehl heisst grep.

Beispiel:

grep -i ‚muster‘ *

-> durchsucht alle Dateien im Verzeichnis nach „muster“ ignoriert dabei Groß und Kleinscheibung.

bei Linux gibt es doch einen Befehl, der alle Dateien in einem
Verzeichnis (evtl. auch Unterverzeichnisse) nach einem
bestimmten String durchsucht, oder?

Hi Jochen,
wenn’s denn auch mit Subdirectories sein soll, wirst du um eine Kombination grep + find nicht herumkommen.
In etwa so (ungestestet):

find . -type f -exec grep -q 'Suchstring' {} \; -a -exec ls -l {} \;

gruß
bernhard

bei Linux gibt es doch einen Befehl, der alle Dateien in einem
Verzeichnis (evtl. auch Unterverzeichnisse) nach einem
bestimmten String durchsucht, oder?

Hi Jochen,
wenn’s denn auch mit Subdirectories sein soll, wirst du um
eine Kombination grep + find nicht herumkommen.

Hallo ihr,

Wieso? Grep kann doch auch rekursiv (Option -r) durch Unterverzeichnisse wühlen.

Gruß

Fritze

Wieso? Grep kann doch auch rekursiv (Option -r) durch
Unterverzeichnisse wühlen.

niehaus@niehaus:~ \> grep -r Tüdelüt .
grep: Ungültige Option -- r
Usage: grep [OPTION]... PATTERN [FILE]...
grep --help gibt Ihnen mehr Informationen.
 

niehaus@niehaus:~ \> grep --version
grep (GNU grep) 2.2
 

 
 

 **8\>  
   
   
   
niehaus@corrosive:~ \> grep -r Tüdelüt .  
niehaus@corrosive:~ \>  
niehaus@corrosive:~ \> grep --version   
grep (GNU grep) 2.4.2**  
fritze@susie:~\> grep --version
grep (GNU grep) 2.5.1

fritze@susie:~\> man grep

NAME
 grep, egrep, fgrep - print lines matching a pattern

SYNOPSIS
 grep [options] PATTERN [FILE...]
 grep [options] [-e PATTERN | -f FILE] [FILE...]

DESCRIPTION
 Grep searches the named input FILEs (or standard input if
 no files are named, or the file name - is given) for lines
 containing a match to the given PATTERN. By default, grep
 prints the matching lines.

 In addition, two variant programs egrep and fgrep are
 available. Egrep is the same as grep -E. Fgrep is the
 same as grep -F.

OPTIONS

[...]

-R, -r, --recursive
 Read all files under each directory, recursively;
 this is equivalent to the -d recurse option.

Mach mal 'n Update.

Gruß

Fritze

Mach mal 'n Update.

In der Tat. Das Laptop kann ich schmerzfrei „auf Arbeit“ anstöpseln, über Modem ist das sonst leidlich uncool…

Sebatian

Wieso? Grep kann doch auch rekursiv (Option -r) durch
Unterverzeichnisse wühlen.

Hi Fritze,
unter AIX leider nicht :frowning:

  • überhaupt sind die ganzen Standard-Tools im Vergleich zu ihren GNU-Verwandten sehr abgespeckt (okay, hier mag man sich fragen, wer denn da von wem abgeschrieben hat…).

Gruß
bernhard

Wieso? Grep kann doch auch rekursiv (Option -r) durch
Unterverzeichnisse wühlen.

unter AIX leider nicht :frowning:

Gefragt war aber ausgrücklich nach Linux.

  • überhaupt sind die ganzen Standard-Tools im Vergleich zu
    ihren GNU-Verwandten sehr abgespeckt

Ja. In der Tat.

Aus Gründen der Portabilität sollte man sich sehr genau überlegen, ob man wirklich die erweiterten Optionen der GNU-Tools nutzen möchte…

Deshalb halte ich den Ansatz mit „grep -r“ ‚im Allgemeinen‘ für problematisch (in diesem Fall aber immerhin legitim…)

Sebastian

mein vorschlag
Hallo Jochen!

Ich habe vor einiger Zeit schonmal vor dem selben Problem gestanden und mir dann ein Script geschrieben, welches sich gut bewährt hat. Allerdings ist dieses für AIX gedacht. Du kannst es aber unbedenklich mal bei Linux ausprobieren.
Lass mich mal wissen, ob’s bei dir funktioniert!

Mayo

Inhalt des Scripts (bei mir hat’s den Namen „get_grep“):
********************************************************************

Script zum Ermitteln aller Dateien einschliesslich der Unterverzeichnisse ab einem vorgegebenen Verzeichnis, in denen ein angegebenes Suchmuster vorkommt!

Die Syntax lautet: ‚get_grep ausgangsverzeichnis suchmuster‘

Dieser Vorgang kann u.U. sehr lange dauern!

by Mayo

Überprüfung, ob User auch ROOT ist!

corr=root
name=whoami
if ["$corr" = „$name“]
then
continue
else
echo
echo " Sie sind als $name angemeldet!"
echo " Bitte melden Sie sich als ROOT an!"
echo " Vorgang ist abgebrochen."
echo
exit
fi

SYNTAX=$*
TREE=$1
VALUE=$2

if test $# -ne 2
then echo
echo „‚get_grep $SYNTAX‘ inkorrekt, breche deshalb die Aktion ab!“
echo „Syntax lautet: ‚get_grep ausgangsverzeichnis suchmuster‘“
echo
exit
fi

echo
echo „Ermittle alle Dateien im Verzeichnisbaum ‚$TREE‘“
echo „in denen ‚$VALUE‘ als Suchmuster vorkommt!“
echo „Bitte warten, Ergebnisse folgen gleich …“
echo

find $TREE -type f > /tmp/list_grep.root

Das folgende rm löscht die Ergebnisdatei einer vorigen Suchanfrage

rm /tmp/get_grep_files.root

cat /tmp/list_grep.root | while read FILE

do
grep -il $VALUE $FILE 2>/tmp/error_grep.tmp.root | tee -ai /tmp/get_grep_files.root
done

echo

rm /tmp/list_grep.root
rm /tmp/error_grep.tmp.root

echo „Dies waren alle Dateien im Verzeichnisbaum ‚$TREE‘“
echo „in denen ‚$VALUE‘ als Suchmuster vorkommt!“
echo