Syntax des Kommandos ‚find in files‘
Das find in files
-Kommando ist ein vielseitiges Tool zum Durchsuchen von Textdateien unter Linux. Seine Syntax ist flexibel und ermöglicht es dir, nach verschiedenen Kriterien zu suchen.
Einfache Suche
Die grundlegendste Syntax lautet:
find -type f -name "Dateiname" | xargs grep "Suchbegriff"
Dabei ist:
-
-type f
: Beschränkt die Suche auf reguläre Dateien. -
-name "Dateiname"
: Sucht nur nach Dateien mit dem angegebenen Namen. -
|
: Verbindet beide Befehle. -
xargs grep "Suchbegriff"
: Durchsucht die gefundenen Dateien mitgrep
nach dem angegebenen Begriff.
Erweiterte Suche mit Regex-Mustern
Regex-Muster (Regular Expressions) ermöglichen dir die Angabe komplexerer Suchkriterien:
find -type f -name "Dateiname" | xargs grep -E "Muster"
Dabei ist -E
die Option für die Verwendung von Regex-Mustern.
Groß-/Kleinschreibung
Standardmäßig berücksichtigt grep
die Groß-/Kleinschreibung. Um dies zu umgehen, verwende die Option -i
:
find -type f -name "Dateiname" | xargs grep -i "Suchbegriff"
Verwendung von Regex-Mustern für erweiterte Suche
Regex-Muster (Regular Expressions) sind eine mächtige Möglichkeit, deine Suchanfragen in Linux noch präziser und flexibler zu gestalten. Mit ihnen kannst du komplexe Suchkriterien festlegen, die weit über einfache Zeichenfolgenvergleiche hinausgehen.
Vorteile von Regex-Mustern
- Erweiterte Suche: Suche nach Mustern, die mehrere Zeichen, Positionen und Strukturen abdecken.
- Flexible Suche: Passe die Suchkriterien an, um versteckte oder komplexe Informationen zu finden.
- Zeitersparnis: Automatisiere Suchaufgaben und spare wertvolle Zeit.
Grundlagen von Regex-Mustern
Regex-Muster verwenden spezielle Symbole und Syntax, um Suchkriterien zu definieren. Hier sind einige grundlegende Regeln:
-
Metazeichen: Symbole wie
.
,*
und?
haben eine besondere Bedeutung. - Zeichengruppen: Umklammern mehrere Zeichen, um sie als Gruppe zu behandeln.
- Quantifizierer: Gebe an, wie oft ein Muster auftreten darf oder muss.
Anwendung in find in files
In find in files
kannst du Regex-Muster verwenden, indem du die Option -regex
angibst. Beispielsweise:
find / -regex ".*\.txt$"
Dieser Befehl sucht nach allen Dateien mit der Erweiterung .txt
im Stammverzeichnis /
.
Häufige Regex-Muster
Im Folgenden findest du einige häufige Regex-Muster, die dir bei der Suche helfen können:
-
Alle Zeichen:
.*
-
Beliebige Zeichen:
.
-
Zeichenbereich:
[a-z]
-
Quantifizierer:
-
?
: Entweder vorhanden oder nicht vorhanden -
*
: Beliebig oft vorhanden -
+
: Mindestens einmal vorhanden
-
-
Wortgrenzen:
\b
Tipps zur Verwendung von Regex-Mustern
- Teste deine Muster: Verwende Regex-Tester oder Online-Tools, um die Gültigkeit deiner Muster zu überprüfen.
- Beginne einfach: Beginne mit einfachen Mustern und arbeite dich zu komplexeren vor.
- Nutze Online-Ressourcen: Suche nach hilfreichen Tutorials und Referenzmaterialien zu Regex-Mustern.
Indem du Regex-Muster in find in files
verwendest, kannst du deine Suchanfragen optimieren und präzisieren. Dies kann dir helfen, genau die Informationen zu finden, die du benötigst, auch wenn sie in großen Textdateien oder komplexen Dateistrukturen verborgen sind.
Berücksichtigung von Groß-/Kleinschreibung
Beim Durchsuchen von Textdateien mit dem Befehl find in files
kannst du festlegen, ob Groß- und Kleinschreibung berücksichtigt werden soll. Dies kann besonders hilfreich sein, wenn du nach bestimmten Wörtern oder Phrasen suchst, die sowohl in Groß- als auch in Kleinbuchstaben vorkommen können.
h3 Groß-/Kleinschreibung ignorieren
Standardmäßig ignoriert der Befehl find in files
die Groß-/Kleinschreibung. Dies bedeutet, dass du beispielsweise nach "Linux" suchen kannst und sowohl Ergebnisse mit "Linux" als auch mit "linux" erhältst.
h3 Groß-/Kleinschreibung beachten
Um Groß-/Kleinschreibung zu berücksichtigen, verwende die Option -cs
(case-sensitive). Beispielsweise würde der folgende Befehl nur nach Ergebnissen mit "Linux" suchen:
find / -name '*.txt' -exec grep -Hn 'Linux' {} \; -cs
h3 Groß-/Kleinschreibung teilweise beachten
Für eine flexiblere Suche kannst du auch die Option -ci
(case insensitive) verwenden. Diese Option berücksichtigt Groß-/Kleinschreibung nur für die ersten Buchstaben eines Wortes oder einer Phrase. Dies kann hilfreich sein, wenn du nach Wörtern suchst, die in einem Satz großgeschrieben werden:
find / -name '*.txt' -exec grep -Hn 'Linux' {} \; -ci
Dieser Befehl würde beispielsweise sowohl "Linux" als auch "linux" finden, aber nicht "LINUX".
h3 Tipps
- Denke daran, dass die Option
-cs
oder-ci
vor dem Suchmuster angegeben werden muss. - Wenn du Regex-Muster verwendest, musst du die Option
-r
(regex) verwenden, um die Groß-/Kleinschreibung zu berücksichtigen oder zu ignorieren. - Überprüfe die Ergebnisse sorgfältig, um sicherzustellen, dass sie deinen Erwartungen entsprechen.
Suche in mehreren Dateien gleichzeitig
Wenn du mehrere Dateien auf einmal durchsuchen musst, kannst du die Option -name
des Kommandos find
verwenden, um die Dateien anzugeben, die du durchsuchen möchtest. Du kannst Platzhalter wie *
oder ?
verwenden, um Übereinstimmungen mit Dateinamen oder -erweiterungen zu finden.
Syntax:
find <Pfad> -name <Dateimuster> | xargs grep <Suchmuster>
Beispiel:
Suche nach der Zeichenfolge "Beispieltext" in allen Dateien mit der Erweiterung .txt
im aktuellen Verzeichnis und in allen Unterverzeichnissen:
find . -name "*.txt" | xargs grep "Beispieltext"
Tipps:
- Du kannst mehrere Dateimuster angeben, indem du sie durch Leerzeichen trennst.
- Du kannst die Option
-print0
zufind
hinzufügen, um Nullen als Trennzeichen zu verwenden, falls die Dateinamen Leerzeichen enthalten. - Die Option
-exec
kann verwendet werden, um ein beliebiges Kommando auf den gefundenen Dateien auszuführen, z. B.-exec grep {} \;
, umgrep
auf jeder gefundenen Datei auszuführen.
Suche nach Dateien mit bestimmten Namen oder Erweiterungen
Bestimmte Dateinamen oder Erweiterungen zu kennen, kann die Suche erheblich erleichtern. Mit dem Befehl find
kannst du nach Dateien mit einem bestimmten Namen oder einer bestimmten Erweiterung suchen.
Suche nach Dateinamen
Um nach Dateien mit einem bestimmten Namen zu suchen, verwende die Option -name
:
find /pfad/zum/verzeichnis/ -name dateiname
Beispiel:
find /home/benutzername/Dokumente/ -name bericht.txt
Dies sucht nach Dateien mit dem Namen bericht.txt
im Verzeichnis Dokumente
.
Suche nach Dateierweiterungen
Um nach Dateien mit einer bestimmten Erweiterung zu suchen, verwende die Option -iname
(Groß-/Kleinschreibung wird ignoriert):
find /pfad/zum/verzeichnis -iname dateierweiterung
Beispiel:
find /home/benutzername/Downloads/ -iname *.pdf
Dies sucht nach allen PDF-Dateien im Verzeichnis Downloads
.
Begrenzung der Suchergebnisse
Manchmal kann es vorkommen, dass du deine Suche eingrenzen möchtest, um nur die relevantesten Ergebnisse zu erhalten. Das Kommando find in files
bietet mehrere Optionen, um die Anzahl der zurückgegebenen Suchergebnisse zu begrenzen.
Beschränkung der Anzahl der angezeigten Zeilen
Verwende die Option -nLINES
, um anzugeben, wie viele Zeilen um jedes gefundene Muster herum angezeigt werden sollen. Beispielsweise zeigt findinfiles -n3 text.txt "Muster"
drei Zeilen vor und drei Zeilen nach jedem gefundenen Muster an.
Beschränkung der Anzahl der Fundstellen pro Datei
Mit der Option -mNUM
kannst du die Anzahl der Fundstellen pro Datei begrenzen. Beispielsweise zeigt findinfiles -m5 text.txt "Muster"
nur die ersten fünf Fundstellen in jeder Datei an.
Beschränkung der Gesamtzahl der Fundstellen
Die Option -maxresults NUM
begrenzt die Gesamtzahl der angezeigten Fundstellen in allen Dateien. Beispielsweise zeigt findinfiles -maxresults 20 text.txt "Muster"
maximal 20 Fundstellen an.
Beschränkung der Suche auf bestimmte Abschnitte einer Datei
Wenn du die Suche auf einen bestimmten Abschnitt einer Datei beschränken möchtest, kannst du die Optionen -start
und -end
verwenden. -start
gibt die Startzeile an, ab der die Suche beginnen soll, während -end
die letzte Zeile angibt, die durchsucht werden soll. Beispielsweise sucht findinfiles -start 10 -end 20 text.txt "Muster"
nur in den Zeilen 10 bis 20 nach dem Muster.
Suche nach Verschiebungen in Dateien
Manchmal musst du möglicherweise nach Dateien suchen, die bestimmte Verschiebungen enthalten, z. B. Zeilenumbrüche oder Tabulatoren. Das Kommando find in files
bietet Optionen, um diese Aufgabe zu erleichtern.
Verwendung von -print0
und xargs -0
Um nach Verschiebungen zu suchen, musst du zunächst die Zeilen terminieren, indem du die Option -print0
verwendest. Anschließend kannst du xargs -0
verwenden, um die Ausgabe an einen anderen Befehl weiterzuleiten, wie z. B. grep
.
find . -print0 | xargs -0 grep -Hn TAB
Verwendung von -regex
Alternativ kannst du auch die Option -regex
verwenden, um nach regulären Ausdrücken zu suchen, die Verschiebungen darstellen. Beispielsweise sucht der folgende Befehl nach Zeilenumbrüchen:
find . -type f -regex ".*\n.*"
Berücksichtigung von Groß-/Kleinschreibung
Standardmäßig unterscheidet die Suche nach Verschiebungen zwischen Groß- und Kleinschreibung. Wenn du eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung durchführen möchtest, verwende die Option -iregex
.
find . -type f -iregex ".*\n.*"
Verwendung von Platzhaltern
Du kannst Platzhalter verwenden, um die Suche nach Verschiebungen zu verallgemeinern. Beispielsweise sucht der folgende Befehl nach Zeilen, die mit einem Leerzeichen beginnen:
find . -type f -regex ".* \n.*"
Tipps zur Suche nach Verschiebungen
- Verwende
-print0
undxargs -0
, wenn du nach komplexen Verschiebungen suchen musst. - Verwende
-regex
für einfachere Suchen nach Verschiebungen. - Berücksichtige die Groß-/Kleinschreibung, wenn dies für deine Suche relevant ist.
- Verwende Platzhalter, um die Suche zu verallgemeinern.
Suche nach Dateien mit bestimmten Berechtigungen
Neben der Suche nach Textinhalten kannst du mit dem Befehl find in files
auch Dateien anhand ihrer Berechtigungen suchen. Dies kann hilfreich sein, wenn du Dateien mit bestimmten Zugriffsrechten identifizieren musst, beispielsweise schreibgeschützte Dateien oder Dateien, auf die nur bestimmte Benutzer zugreifen können.
Verwendung von Berechtigungsflags
Um nach Dateien mit bestimmten Berechtigungen zu suchen, verwende die Flags -perm
oder -permission
. Diese Flags erwarten eine Zeichenfolge, die die gewünschten Berechtigungen in Form eines numerischen Codes oder einer Buchstabenfolge beschreibt.
Numerische Codes:
- 0: Keine Berechtigung
- 1: Ausführungsberechtigung
- 2: Schreibberechtigung
- 4: Leseberechtigung
- 6: Schreib- und Leseberechtigung
- 7: Ausführungs-, Schreib- und Leseberechtigung
Buchstabenfolge:
- u: Eigentümer
- g: Gruppe
- o: Andere
- a: Alle (Abkürzung für ugo)
- r: Leseberechtigung
- w: Schreibberechtigung
- x: Ausführungsberechtigung
Beispiele
Beispiel 1: Suche nach Dateien, die nur für den Eigentümer beschreibbar sind (Berechtigungscode 200):
find in files -perm 200
Beispiel 2: Suche nach Dateien, auf die jeder schreiben kann (Berechtigungscode 2):
find in files -perm -2
Beispiel 3: Suche nach ausführbaren Dateien für die Gruppe (Buchstabenfolge g+x):
find in files -permission g+x
Kombination mit anderen Optionen
Du kannst die Berechtigungsflags auch mit anderen Optionen kombinieren, um deine Suche weiter einzugrenzen. Beispielsweise kannst du nach Dateien mit bestimmten Berechtigungen in einem bestimmten Verzeichnis suchen:
find /Pfad/zum/Verzeichnis -perm 644 -name "*.txt"
Dieser Befehl sucht nach Dateien im Verzeichnis /Pfad/zum/Verzeichnis
, die die Berechtigung 644 haben (nur für den Eigentümer beschreibbar) und die Erweiterung .txt
aufweisen.
Suche nach Dateien, die sich in Unterverzeichnissen befinden
Wenn du nach Dateien suchen möchtest, die sich in Unterverzeichnissen des aktuellen Verzeichnisses befinden, kannst du die Option -r
(rekursiv) verwenden. Diese Option weist find
an, rekursiv in allen Unterverzeichnissen nach Übereinstimmungen zu suchen.
Beispiel
Um beispielsweise nach allen Dateien mit der Erweiterung .txt
zu suchen, die sich in Unterverzeichnissen des aktuellen Verzeichnisses befinden, würdest du folgenden Befehl ausführen:
find . -name "*.txt" -r
Suche nach Dateien in bestimmten Unterverzeichnissen
Du kannst -r
auch mit der Option -path
kombinieren, um die Suche auf bestimmte Unterverzeichnisse einzugrenzen. Die Syntax lautet:
find . -path "<Pfad zum Unterverzeichnis>" -name "<Dateiname>" -r
Beispiel
Um beispielsweise nach allen Dateien mit dem Namen README.md
im Unterverzeichnis Dokumente
zu suchen, würdest du folgenden Befehl ausführen:
find . -path "./Dokumente" -name "README.md" -r
Beachte die folgenden Punkte:
- Wenn du
-r
verwendest, kann die Suche je nach Anzahl der Unterverzeichnisse und Dateien einige Zeit in Anspruch nehmen. - Stelle sicher, dass du über die entsprechenden Berechtigungen verfügst, um auf die Unterverzeichnisse zugreifen zu können. Andernfalls werden die Dateien in diesen Verzeichnissen nicht in den Suchergebnissen angezeigt.
- Du kannst Platzhalter wie
*
und?
verwenden, um die Suche zu verallgemeinern. Weitere Informationen zu Platzhaltern findest du im Abschnitt Verwendung von Platzhaltern für dynamische Suche.
Verwendung von Platzhaltern für dynamische Suche
Platzhalter sind ein leistungsstarkes Tool, mit dem du deine Suchanfragen dynamischer und flexibler gestalten kannst. Sie ermöglichen es dir, nach Dateien zu suchen, die bestimmte Kriterien erfüllen, ohne jedes Mal die exakten Dateinamen oder Suchbegriffe eingeben zu müssen.
Sternchen (*)
Das Sternchen (*) ist ein Platzhalter, der für eine beliebige Zeichenfolge steht. Du kannst es verwenden, um nach Dateien zu suchen, die mit einem bestimmten Präfix oder Suffix beginnen oder enden.
Beispiel:
find / -name "*log"
Diese Suche findet alle Dateien, die auf ".log" enden, unabhängig von ihrem Pfad.
Fragezeichen (?)
Das Fragezeichen (?) ist ein Platzhalter, der für ein beliebiges einzelnes Zeichen steht. Du kannst es verwenden, um nach Dateien mit einem bestimmten Dateinamenmuster zu suchen.
Beispiel:
find / -name "file?txt"
Diese Suche findet alle Dateien, die mit "file" beginnen und mit ".txt" enden, wobei das mittlere Zeichen beliebig sein kann.
Eckige Klammern ([])
Eckige Klammern ermöglichen es dir, eine Liste von Zeichen anzugeben, nach denen du suchen möchtest. Du kannst einen einzelnen Buchstabe oder einen Bereich von Buchstaben angeben.
Beispiel:
find / -name "[ABC]file.txt"
Diese Suche findet alle Dateien, die mit "A", "B" oder "C" beginnen und mit ".txt" enden.
Bindestriche (-)
Bindestriche können innerhalb von eckigen Klammern verwendet werden, um einen Bereich von Zeichen anzugeben.
Beispiel:
find / -name "[A-Z]file.txt"
Diese Suche findet alle Dateien, die mit einem Großbuchstaben beginnen und mit ".txt" enden.
Verwendung mehrerer Platzhalter
Du kannst mehrere Platzhalter in einer einzigen Suchanfrage kombinieren, um nach noch komplexeren Dateinamenmustern zu suchen.
Beispiel:
find / -name "*[0-9]*file.txt"
Diese Suche findet alle Dateien, die mit einer beliebigen Zeichenfolge beginnen, gefolgt von einer beliebigen Anzahl von Ziffern, und mit ".txt" enden.
Suchen und Ersetzen von Text in Dateien
Neben der Suche nach Text kannst du mit dem Befehl find in files
auch Text in Dateien suchen und ersetzen. Dies kann sehr nützlich sein, um beispielsweise alle Instanzen eines bestimmten Wortes oder Ausdrucks in einer Gruppe von Dateien zu aktualisieren.
So suchst und ersetzt du Text in Dateien:
Verwende die Syntax find -exec sed -i '' s/old_text/new_text/g {} \;
. Ersetze dabei old_text
durch den Text, den du suchen möchtest, und new_text
durch den Text, durch den du ihn ersetzen möchtest. Die Option -i ''
weist sed
an, die Änderungen direkt in den Dateien vorzunehmen.
find . -name '*.txt' -exec sed -i '' s/old_text/new_text/g {} \;
Berücksichtigung von Groß-/Kleinschreibung
Standardmäßig unterscheidet sed
zwischen Groß- und Kleinschreibung. Wenn du eine Groß-/Kleinschreibungsunterscheidung vermeiden möchtest, füge die Option -i
hinzu.
find . -name '*.txt' -exec sed -i s/old_text/new_text/g {} \;
Verwendung von Regex-Mustern
Du kannst reguläre Ausdrücke verwenden, um komplexere Such- und Ersetzungsoperationen durchzuführen. Weitere Informationen zu regulären Ausdrücken findest du in der Dokumentation von sed
.
Suchen und Ersetzen in mehreren Dateien
Du kannst Text in mehreren Dateien gleichzeitig suchen und ersetzen, indem du die Option -exec
verwendest.
find . -name '*.txt' -exec sed -i '' s/old_text/new_text/g {} \;
Tipp: Sicherungskopien erstellen
Es wird empfohlen, vor dem Ausführen von Ersetzungsvorgängen Sicherungskopien der Dateien zu erstellen, um Datenverluste zu vermeiden.
Suche in binären Dateien
Wenn du nach spezifischen Mustern in binären Dateien wie Bildern, Archiven oder ausführbaren Dateien suchst, musst du andere Methoden als bei Textdateien anwenden. Hier sind einige Möglichkeiten:
hexdump
und grep
verwenden
hexdump konvertiert Binärdaten in einen hexadezimalen Dump. Du kannst es zusammen mit grep verwenden, um nach Hexmustern zu suchen:
hexdump -C datei | grep "<muster>"
strings
verwenden
strings extrahiert druckbare Zeichenfolgen aus Binärdateien. Du kannst es verwenden, um nach Text in Binärdateien zu suchen:
strings datei | grep "<muster>"
binwalk
oder foremost
verwenden
binwalk und foremost sind forensische Werkzeuge, die speziell für die Extraktion von Dateien und Metadaten aus Binärdateien entwickelt wurden. Sie können auch verwendet werden, um nach spezifischen Mustern in Binärdateien zu suchen.
Einschränkungen beachten
- Die genannten Methoden sind möglicherweise nicht bei allen Binärdateitypen wirksam.
- Einige Binärdateiformate enthalten verschlüsselte oder komprimierte Daten, die die Suche erschweren können.
- Die Suche in großen Binärdateien kann zeitaufwendig sein.
- Wenn du nach komplexen Mustern in Binärdateien suchen musst, kann es erforderlich sein, benutzerdefinierte Skripte oder spezielle forensische Software zu verwenden.
Tipps zur Fehlerbehebung bei Suchanfragen
Wenn du bei der Verwendung des Befehls ‚find in files‘ auf Probleme oder unerwartete Ergebnisse stößt, helfen dir die folgenden Tipps bei der Fehlerbehebung:
Überprüfe deinen regulären Ausdruck
Wenn du Regex-Muster verwendest, überprüfe, ob sie korrekt formatiert sind. Ungültige Syntax oder falsche Escape-Sequenzen können zu unerwarteten Ergebnissen führen. Du kannst Online-Tools wie Regex101 (https://regex101.com/) verwenden, um deine Regex-Muster zu testen und sicherzustellen, dass sie wie erwartet funktionieren.
Beachte die Groß-/Kleinschreibung
Beachte, dass die Suche standardmäßig die Groß-/Kleinschreibung berücksichtigt. Wenn du nach "regex" suchst, findest du beispielsweise nicht "Regex" oder "REGEX". Um die Suche unabhängig von der Groß-/Kleinschreibung zu gestalten, verwende die Option -i
.
Überprüfe die Dateiberechtigungen
Wenn du keine Ergebnisse erhältst, überprüfe, ob du über die erforderlichen Berechtigungen zum Lesen der Dateien verfügst. Möglicherweise musst du sudo
verwenden, um den Befehl mit erhöhten Rechten auszuführen.
Suche nach leeren Dateien
Wenn du nach Text in leeren Dateien suchst, kann das zu unerwarteten Ergebnissen führen. Verwende in diesem Fall die Option -type f -size +0c
in deinem Befehl, um nur nach Dateien zu suchen, die Text enthalten.
Überprüfe die Escapes
Wenn du versuchst, nach Sonderzeichen wie Leerzeichen oder Klammern zu suchen, musst du sie möglicherweise escapen, indem du ihnen einen umgekehrten Schrägstrich voranstellst. Beispielsweise suchst du nach "my file.txt" mit "find . -name "my\ file.txt"
".