Rekursives Auffinden von Dateien nach Name unter Linux
Syntax des Befehls 'find'
Der Befehl find
ist ein leistungsstarkes Tool, mit dem du Dateien und Verzeichnisse auf Linux-Systemen basierend auf verschiedenen Kriterien durchsuchen kannst. Die Syntax des Befehls find
lautet:
find [Optionen] start_verzeichnis [Ausdrucksliste]
Pflichtargume
- start_verzeichnis: Das Verzeichnis, in dem die Suche beginnen soll.
- Ausdrucksliste: Eine Liste von Ausdrücken, die definieren, nach welchen Dateien und Verzeichnissen gesucht werden soll.
Optionale Argumente
find
bietet zahlreiche Optionen, die die Suche anpassen und verfeinern können:
Wichtige zu beachtende Punkte
- Der Befehl
find
ist rekursiv, d. h. er durchsucht standardmäßig alle Unterverzeichnisse unter dem angegebenen Startverzeichnis. - Du kannst Platzhalter wie "*" oder "?" verwenden, um nach Dateien zu suchen, die bestimmten Mustern entsprechen.
- Du kannst Optionen wie
-mtime
,-size
oder-type
verwenden, um Dateien nach Kriterien wie Änderungsdatum, Größe oder Dateityp einzugrenzen. - Wenn du versteckte Dateien durchsuchen möchtest, musst du die Option
-hidden
verwenden. - Du kannst die Suchtiefe begrenzen, indem du die Option
-maxdepth
verwendest.
Verwendung von Platzhaltern
Wenn du nicht den genauen Dateinamen kennst oder nach einer Gruppe von Dateien mit ähnlichen Namen suchst, kannst du Platzhalter verwenden. Dies sind Sonderzeichen, die einen einzelnen Charakter oder eine Zeichenfolge darstellen. Die am häufigsten verwendeten Platzhalter sind:
-
*
: Steht für eine beliebige Anzahl von beliebigen Zeichen. -
?
: Steht für ein einzelnes Zeichen. -
[]
: Steht für einen beliebigen Charakter in der Liste innerhalb der eckigen Klammern. -
{}
: Steht für einen beliebigen Charakter oder Ausdruck in der Liste innerhalb der geschweiften Klammern.
Beispiele
- Um nach allen Dateien zu suchen, die mit "Datei" beginnen, verwende
Datei*
. - Um nach allen Dateien zu suchen, die mit "xyz" enden, verwende
*xyz
. - Um nach allen Dateien zu suchen, die "txt" oder "doc" enthalten, verwende
*txt*
oder*doc*
. - Um nach allen Dateien zu suchen, die die Ziffern "1" bis "9" enthalten, verwende
*[1-9]*
. - Um nach allen Dateien zu suchen, die auf Vokale enden, verwende
*aeiou$
.
Kombinieren von Platzhaltern
Du kannst Platzhalter kombinieren, um komplexere Suchmuster zu erstellen. Beispielsweise:
- Um nach allen Dateien zu suchen, die "doc" enthalten und mit "Datei" beginnen, verwende
Datei*doc*
. - Um nach allen Dateien zu suchen, die mit "txt" enden und eine beliebige Anzahl von Zeichen in der Mitte enthalten, verwende
*txt
.
Sonderfälle
Denke daran, dass Platzhalter möglicherweise nicht alle Arten von Sonderzeichen entsprechen. Wenn du nach Dateien suchst, die Sonderzeichen wie Leerzeichen, Punkte oder Schrägstriche enthalten, musst du möglicherweise Escape-Zeichen verwenden. Beispielsweise:
- Um nach einer Datei namens "Meine Datei.txt" zu suchen, verwende
Meine\ Datei\.txt
.
Verwende Platzhalter weise, um deine Suche zu optimieren und die gewünschten Dateien schneller zu finden.
Optionen zur Dateieinschränkung (wie Größe, Datum oder Dateityp)
Um die Suche weiter einzugrenzen, bietet der Befehl find
zusätzliche Optionen zur Einschränkung der Dateiauswahl. Diese Optionen ermöglichen es dir, Dateien anhand ihrer Größe, ihres Datums oder ihres Typs zu filtern.
Größe
Verwende die Option -size
gefolgt von einem Größenoperator und einem Wert, um Dateien basierend auf ihrer Größe einzuschränken. Die gängigen Größenoperatoren sind:
-
-size +<Größe>
: Größer als die angegebene Größe -
-size -<Größe>
: Kleiner als die angegebene Größe -
-size <Größe>
: Genaue angegebene Größe
Beispiel: Um alle Dateien zu finden, die größer als 10 MB sind, verwende:
find /home -size +10M
Datum
Beschränke die Suche auf Dateien, die zu einem bestimmten Datum oder innerhalb eines bestimmten Datumsbereichs erstellt, geändert oder aufgerufen wurden. Verwende die folgenden Optionen:
-
-atime
: Zeitpunkt des letzten Zugriffs -
-mtime
: Zeitpunkt der letzten Änderung -
-ctime
: Zeitpunkt der letzten Statusänderung
Jede dieser Optionen kann mit einem Operator und einem Datum gefolgt werden. Die gängigen Operatoren sind:
-
-newer <Datei>
: Neuer als die angegebene Datei -
-older <Datei>
: Älter als die angegebene Datei -
-newermt <Datum>
: Neuer als das angegebene Datum (Format: JJJJ-MM-TT) -
-oldermt <Datum>
: Älter als das angegebene Datum (Format: JJJJ-MM-TT)
Beispiel: Um alle Dateien zu finden, die in den letzten 7 Tagen geändert wurden, verwende:
find /home -mtime -7
Dateityp
Beschränke die Suche auf Dateien eines bestimmten Typs. Verwende die Option -type
gefolgt von einem Dateityp:
-
f
: Normale Datei -
d
: Verzeichnis -
l
: Symbolischer Link -
c
: Zeichen-Sonderdatei -
b
: Block-Sonderdatei -
p
: FIFO (Benanntes Pipe)
Beispiel: Um alle Verzeichnisse im aktuellen Verzeichnis zu finden, verwende:
find . -type d
Durch die Kombination dieser Optionen kannst du deine Suche präzise eingrenzen und genau die Dateien finden, die du benötigst.
Berücksichtigung von versteckten Dateien
Versteckte Dateien sind unter Linux Dateien, deren Name mit einem Punkt (.) beginnt. Sie werden standardmäßig von der Ausgabe des Befehls find
ausgeschlossen. Um auch versteckte Dateien in deine Suche einzubeziehen, kannst du die Option -a
(auch bekannt als -all
) verwenden.
Beachte dies:
- Die Option
-a
durchsucht auch Verzeichnisse, die mit einem Punkt beginnen, wie.git
oder.ssh
. - Wenn du versteckte Dateien gezielt ausschließen möchtest, verwende die Option
-A
(auch bekannt als-almost-all
). - Wenn du nur versteckte Dateien finden möchtest, kombiniere die Option
-a
mit der Option-name .*\
(beachte den Backslash), um Dateien zu finden, deren Name mit einem Punkt beginnt.
Beispiel:
Um alle Dateien, einschließlich versteckter Dateien, zu finden, die den Namen secret.txt
enthalten, führe den folgenden Befehl aus:
find . -a -name secret.txt
Um nur versteckte Dateien zu finden, die den Namen secret.txt
enthalten, führe den folgenden Befehl aus:
find . -a -name .*\secret.txt
Rekursive Suche in Unterverzeichnissen
Mithilfe des Find-Befehls kannst du nicht nur in einem einzigen Verzeichnis, sondern auch in allen seinen Unterverzeichnissen rekursiv nach Dateien suchen. Diese Funktion ist besonders nützlich, wenn du eine Datei mit einem bestimmten Namen auf deinem gesamten System finden möchtest.
Um eine rekursive Suche durchzuführen, füge einfach die Option -recurse
(oder -r
) zu deinem Befehl hinzu. Beispielsweise sucht der folgende Befehl rekursiv nach allen Dateien mit dem Namen "report.txt" im aktuellen Verzeichnis und seinen Unterverzeichnissen:
find . -name "report.txt" -recurse
Rekursive Suche mit Platzhaltern
Du kannst Platzhalter verwenden, um nach Dateien zu suchen, die einem bestimmten Muster entsprechen. Beispielsweise sucht der folgende Befehl rekursiv nach allen Dateien, die mit "report" beginnen:
find . -name "report*" -recurse
Beschränkung der Suchtiefe
Möglicherweise möchtest du die Suchtiefe begrenzen, insbesondere wenn du ein großes Dateisystem durchsuchst. Verwende dazu die Option -maxdepth
, gefolgt von der maximalen Anzahl der Verzeichnisebenen, die durchsucht werden sollen. Beispielsweise beschränkt der folgende Befehl die Suche auf die aktuellen Unterverzeichnisse (ohne Unterunterverzeichnisse):
find . -name "report.txt" -recurse -maxdepth 1
Sonderzeichen in Verzeichnisnamen
Wenn du Verzeichnisnamen mit Sonderzeichen hast, musst du diese möglicherweise escapen. Beispielsweise verwendet der folgende Befehl den Escape-Charakter \
vor dem Sternchen, um nach Verzeichnisnamen zu suchen, die ein Sternchen enthalten:
find . -name "dir\*name" -recurse
Begrenzung der Suchtiefe
Um sicherzustellen, dass deine Suche effizient bleibt, kannst du die maximale Tiefe der rekursiven Suche begrenzen. Dies ist hilfreich, wenn du verschachtelte Unterverzeichnisse durchsuchst und verhindern möchtest, dass die Suche zu langsam wird oder zu viele irrelevanten Ergebnisse liefert.
Maximale Suchtiefe festlegen
Verwende die Option -maxdepth
, um die maximale Suchtiefe festzulegen. Die Syntax lautet:
find /pfad/zum/verzeichnis -maxdepth <tiefe>
Die tiefe
gibt die maximale Anzahl von Ebenen an, in die der Befehl find
rekursiv eintauchen soll.
Beispiel:
find /home/benutzername -maxdepth 2
Diese Suche durchsucht nur das Verzeichnis /home/benutzername
und die direkt darunter liegenden Unterverzeichnisse (Ebene 1 und 2).
Überlegungen
- Die Tiefenbeschränkung gilt auch für die Startverzeichnisse, die du in der Befehlszeile angibst.
- Wenn du
-maxdepth 0
verwendest, durchsucht der Befehlfind
nur das aktuelle Verzeichnis, ohne Unterverzeichnisse zu berücksichtigen. - Die Verwendung einer Tiefenbeschränkung kann die Suchzeit erheblich verkürzen, insbesondere bei großen Dateisystemen mit einer komplexen Verzeichnisstruktur.
Suche nach Dateien mit exaktem Namen oder Muster
Um eine Datei zu finden, die exakt einen bestimmten Namen hat, verwende die Option -name
. Gib einfach den Dateinamen in Anführungszeichen nach der Option an.
find /pfad/zum/verzeichnis -name "dateiname"
Suche nach Dateien mit Muster
Du kannst auch nach Dateien suchen, die einem bestimmten Muster entsprechen, indem du Platzhalter in der Option -name
verwendest. Der Stern (*) steht dabei für eine beliebige Anzahl an Zeichen, das Fragezeichen (?) für ein einzelnes Zeichen.
Beispiele:
-
-name "*.txt"
: Sucht nach Dateien mit der Endung.txt
-
-name "datei*"
: Sucht nach Dateien, die mit "datei" beginnen -
-name "*teil*"
: Sucht nach Dateien, die das Wort "teil" enthalten
Groß-/Kleinschreibung beachten
Standardmäßig ignoriert der Befehl find
die Groß-/Kleinschreibung. Wenn du die Groß-/Kleinschreibung beachten möchtest, verwende die Option -iname
.
find /pfad/zum/verzeichnis -iname "DATEINAME"
Besonderheiten bei Sonderzeichen
Wenn du nach Dateien mit Sonderzeichen im Namen suchst, musst du diese mit einem Escape-Zeichen () schützen.
find /pfad/zum/verzeichnis -name "datei\ mit\ sonderzeichen"
Suche nach Dateien, die mit einem bestimmten Muster beginnen oder enden
Dateien finden, die mit einem Muster beginnen
Um Dateien zu finden, die mit einem bestimmten Muster beginnen, kannst du den Platzhalter "*" am Ende des Musters verwenden. Nimm beispielsweise an, du möchtest alle Dateien finden, die mit "Projekt" beginnen:
find / -name "Projekt*"
Dateien finden, die mit einem Muster enden
Um Dateien zu finden, die mit einem bestimmten Muster enden, kannst du den Platzhalter "*" vor dem Muster verwenden. Angenommen, du möchtest alle Dateien finden, die mit ".txt" enden:
find / -name "*txt"
Beachte die Groß- und Kleinschreibung
Standardmäßig ist die Suche nach Dateinamen bei find
case-sensitive. Wenn du also nach Dateien mit einem bestimmten Groß-/Kleinschreibungsmuster suchen möchtest, musst du dies explizit angeben. Du kannst die Option -iname
verwenden, um eine case-insensitive Suche durchzuführen:
find / -iname "PROJEKT*"
Kombination von Mustern
Du kannst auch mehrere Platzhalter und Muster kombinieren, um komplexere Suchkriterien zu erstellen. Angenommen, du möchtest alle Dateien finden, die mit "Projekt" beginnen und auf ".txt" enden:
find / -name "Projekt*.txt"
Sonderfälle
Es gibt bestimmte Fälle, die beim Auffinden von Dateien nach Muster berücksichtigt werden müssen:
- Sonderzeichen: Sonderzeichen wie Leerzeichen, Punkte und Schrägstriche müssen maskiert oder mit Escape-Zeichen () verwendet werden.
-
Verborgene Dateien: Standardmäßig werden versteckte Dateien (Dateien, deren Name mit einem Punkt beginnt) nicht in den Suchergebnissen angezeigt. Du kannst die Option
-xdev
verwenden, um versteckte Dateien in die Suche einzubeziehen.
Ausgabe der Funde im gewünschten Format
Nachdem du die entsprechenden Dateien gefunden hast, kannst du sie in verschiedenen Formaten ausgeben lassen. Hier sind einige Optionen:
Einfache Liste
Die Standardausgabe von find
ist eine einfache Liste der Dateipfade:
find /home/benutzer -name "datei.txt"
/home/benutzer/Dokumente/datei.txt
/home/benutzer/Downloads/datei.txt
Lange Liste
Mit der Option -ls
erhältst du eine lange Auflistung, die zusätzliche Informationen wie Dateigröße, Datum der letzten Änderung und Dateiberechtigungen enthält:
find /home/benutzer -name "datei.txt" -ls
-rw-r--r-- 1 benutzer benutzer 1024 Jan 1 00:00 /home/benutzer/Dokumente/datei.txt
-rw------- 1 benutzer benutzer 512 März 8 12:00 /home/benutzer/Downloads/datei.txt
Benutzerdefiniertes Format
Du kannst ein benutzerdefiniertes Format für die Ausgabe festlegen, indem du die Option -printf
verwendest. Mit ihr kannst du die gewünschten Informationen in einem beliebigen Format zusammenstellen.
find /home/benutzer -name "datei.txt" -printf "%f\n"
datei.txt
datei.txt
Weitere formatierungsbezogene Optionen
-
-count
zählt die gefundenen Dateien. -
-print0
trennt die Dateipfade durch ein Nullzeichen (\0
), was für die Weiterverarbeitung in Skripten nützlich ist. -
-xdev
verhindert, dass der Befehlfind
Dateisysteme überquert, um die Ausgabe auf das aktuelle Dateisystem zu beschränken.
Behandlung von Sonderfällen (wie Verzeichnisse mit Sonderzeichen)
Bei der rekursiven Suche nach Dateien unter Linux kannst du auf Sonderfälle stoßen, wie z. B. Verzeichnisse mit Sonderzeichen in ihren Namen. Diese können zu Problemen bei der Suche führen, wenn du Platzhalter oder Muster verwendest.
Escape-Zeichen verwenden
Um Sonderzeichen in Verzeichnisnamen ordnungsgemäß zu handhaben, musst du Escape-Zeichen verwenden. Escape-Zeichen signalisieren dem Befehl find
, dass das folgende Zeichen als Teil des Musters und nicht als Sonderzeichen behandelt werden soll.
Das Escape-Zeichen unter Linux ist der Backslash (\
). Du kannst es vor Sonderzeichen wie Leerzeichen, Tabulatoren, Klammern und Sternchen setzen.
Beispiel:
find /home/benutzer -name "Verzeichnis mit Leerzeichen"
Platzhalter und Sonderzeichen
Einige Platzhalter funktionieren möglicherweise nicht wie erwartet, wenn sie in Verzeichnisnamen mit Sonderzeichen verwendet werden. Beispielsweise kann der Platzhalter *
alle Dateien in einem Verzeichnis einschließlich versteckter Dateien abgleichen, aber er funktioniert möglicherweise nicht ordnungsgemäß mit Sonderzeichen in den Verzeichnisnamen.
In solchen Fällen kannst du die Option -print0
verwenden, um die Funde mit einem Nullbyte zu trennen. Auf diese Weise kannst du auch Sonderzeichen in den Verzeichnisnamen richtig handhaben.
Beispiel:
find /home/benutzer -print0 -name "Verzeichnis mit Leerzeichen" | xargs -0 printf "%s\n"
Globale Muster
Globale Muster bieten eine flexiblere Möglichkeit, Dateien nach Namen zu suchen, einschließlich derer in Verzeichnissen mit Sonderzeichen. Globale Muster sind der Bash-Syntax sehr ähnlich und verwenden Zeichen wie *
, ?
und []
.
Beispiel:
find /home/benutzer -glob "**/Verzeichnis[ ]mit[ ]Leerzeichen/**"
Weitere Tipps
- Verwendung von Anführungszeichen: Setze Anführungszeichen um den Suchbegriff, wenn dieser Leerzeichen enthält oder ein Sonderzeichen ist.
- Konsultieren der
find
-Manpage: Diefind
-Manpage enthält ausführliche Informationen zur Verwendung von Escape-Zeichen und Platzhaltern. - Verwendung von alternativen Suchwerkzeugen: Es gibt andere Suchwerkzeuge unter Linux, wie z. B.
locate
undmlocate
, die möglicherweise besser mit Verzeichnissen mit Sonderzeichen zurechtkommen.
Neue Posts
World of Warcraft auf Linux spielen: Eine guide für Abenteurer
Einführung in World of Warcraft
Node.js NVM: Antworten auf die häufigsten Fragen
Entwicklung
Professionelle Gmail-HTML-Signaturen: Erstellen, Gestalten und Nutzen
Marketingstrategien
Die vollständige Anleitung zu poczta wp: Alles, was Sie wissen müssen
Sicherheit und Datenschutz
HTML-Content: Der ultimative Leitfaden zur Erstellung ansprechender Webseiten
SEO-Optimierung
Das HTML-Title-Attribut: Ein Leitfaden zur Optimierung von Titeln für SEO und Benutzerfreundlichkeit
Online-Marketing
HTTP-Statuscodes: Ihre Bedeutung und Verwendung im Web
Einführung in HTTP-Statuscodes
Besucherzähler für Websites: Tracking Ihres Website-Traffics für Erfolg
SEO-Optimierung
Beschleunigen Sie die Dateneingabe mit HTML Datalist
Webentwicklung
HTML in PUG konvertieren: Einfach und schnell gemacht
Webentwicklung
Beliebte Posts
SteamCMD: Der umfassende Leitfaden zur Verwaltung von Steam-Servern
Sicherheitsrichtlinien
POST-Anfragen: Erstellen, Senden und Empfangen von Daten im Web
Webentwicklung
LaTeX: Das mächtige Werkzeug für hochwertiges Dokumentenschreiben
Dokumentenerstellung
Wiederherstellung beschädigter Linux-Dateisysteme mit fsck: Ein umfassender Leitfaden
Fehlerbehebung
Die vollständige Anleitung zu poczta wp: Alles, was Sie wissen müssen
Sicherheit und Datenschutz
Gigacube Admin: Zugang zu den erweiterten Einstellungen Ihres Routers
Fehlerbehebung
Linux Mint Themes: Personalisieren Sie Ihren Desktop
Open Source
TCPdump-Beispiele: Paketakquise und Netzwerkdiagnose
Fehlerbehebung
Mounten von ISO-Images unter Linux: Eine Schritt-für-Schritt-Anleitung
Anleitungen
Linux Open File: Anleitung zum Öffnen, Bearbeiten und Löschen von Dateien aus dem Terminal
Open Source