Dateien rekursiv nach begriffen durchsuchen?

Post Reply
Message
Author
dhartmann
Posts: 25
Joined: 17. Sep 2004 10:18

Dateien rekursiv nach begriffen durchsuchen?

#1 Post by dhartmann »

Hi Prolinux User,

ich möchte ein kleines BASH Skript schreiben das
- alle Dateien in einem Ordner rekursiv nach einem Begriff durchsucht (alles text files)
- die zu suchenden Begriffe sollen aus einer Datei eingelesen werden
- und am Ende soll eine Ausgabe erscheinen in welchen Dateien die Begriffe enthalten sind

Mir ist da schon einiges mit cat und grep eingefallen
aber ich weiß nicht genau wie es umsetze und welche Werkzeuge ich noch dazu brauche.

Freue mich auf jedes Beispielskript!

Gruß, Diano Hartmann

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#2 Post by jochen »

Im Herzen ein Einzeiler:

Code: Select all

find . -type f -name "*.txt" -print0 | xargs -0 grep -f suchbegriffe -l
find durchsucht ab dem aktuellen Arbeitsverzeichnis (.) alle normalen (-type f) Dateien mit Endung .txt (-name "*.txt") und gibt die Null-Byte-terminiert (-print0) an xargs weiter, der daraus ein (oder ggf. mehrere) grep-Kommandos zusammenbestelt. Diese greps ziehen sich ihre Suchbegriffe aus der Datei suchbegriffe (-f suchbegriffe) und geben bei Treffern nur den Namen der Datei aus (-l).

War's in etwas so etwas?

Jochen
Die grösste Lüge der EDV? "Mal eben..."

dhartmann
Posts: 25
Joined: 17. Sep 2004 10:18

#3 Post by dhartmann »

Hey danke, das hoert sich ja recht vielversprechend an, ich dachte schon ich muss mich mit awk rumquälen ;)

Ich probiers dann mal aus!

dhartmann
Posts: 25
Joined: 17. Sep 2004 10:18

#4 Post by dhartmann »

find sucht also type f dateien? Was ist type f reine text dateien?
ich passe z.Z. für einen Bildungsträger das Studip System an (studip.de)
Dort ist alles in php geschrieben und in diesem System soll eine ganze Liste von Begrifflichkeiten durch andere ersetzt werden. Ne menge php files ;)

Um nicht nun jedes file per hand zu durchsuchen bietet sich es an es per skript zu machen.

So, dann mach ich mich mal an die arbeit ;)

dhartmann
Posts: 25
Joined: 17. Sep 2004 10:18

#5 Post by dhartmann »

Hmmm.... irgendwie funkt das nicht ganz, die Kommandozeile gibt mir immer wieder alle dateien aus...
Bist du dir sicher das die Zeile 100% funktioniert?

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#6 Post by jochen »

Die man-page zu find hilft Dir da weiter: Mittels der Option -type kannst Du den Typ der zu findenden Dateien einschränken.
  • -type f: Normale Dateien (files). Ob deren Inhalt reiner Text, ein Programm im ELF-Format, ein MP3 oder ein Bild im JPEG- oder PNG-Format ist, ist egal; gemeint ist hier die Sicht des Betriebssystems.
  • -type d: Verzeichnisse (directory).
  • -type b : Blockorientierte Gerätedateien (/dev/hda, /dev/sda,...)
  • -type c : Zeichenorientierte Gerätedateien (/dev/tty1, /dev/st0,...)
  • und noch ein paar mehr...
Daher habe ich auch mittels -name "*.txt" die Dateinamen auf "alle, die auf .txt enden" eingeschränkt. Wenn es sich bei Dir um PHP-Dateien handelt, dann verwende dort einfach "*.php" statt "*.txt".

Jochen
Die grösste Lüge der EDV? "Mal eben..."

Post Reply