Linux find: Die ultimative Befehlsreferenz zum Auffinden von Dateien und Verzeichnissen

Foto des Autors

By Jan

Was ist der Befehl ‚find‘?

Der Befehl find ist ein mächtiges Werkzeug in der Linux-Befehlszeile, das es dir ermöglicht, Dateien und Verzeichnisse auf deinem System zu suchen. Er ist besonders hilfreich, wenn du nach einer bestimmten Datei suchen musst, die sich in einem verschachtelten Verzeichnisbaum befindet oder bestimmte Kriterien erfüllt.

Wann sollte ich den Befehl find verwenden?

find ist nützlich, wenn:

  • Du nach einer bestimmten Datei suchst, deren Namen oder Pfad du nicht genau kennst.
  • Du nach Dateien suchen möchtest, die bestimmten Kriterien entsprechen, wie z. B. Größe, Typ oder Änderungsdatum.
  • Du rekursiv in Unterverzeichnissen suchen möchtest, um versteckte Dateien aufzuspüren.
  • Du bestimmte Dateien oder Verzeichnisse von deiner Suche ausschließen möchtest.

Vorteile der Verwendung des Befehls find

Die Verwendung von find bietet mehrere Vorteile:

  • Effizienz: find kann große Datenmengen schnell durchsuchen und Ergebnisse effizient zurückgeben.
  • Flexibilität: Der Befehl bietet eine Vielzahl von Optionen, mit denen du deine Suche anpassen kannst.
  • Zuverlässigkeit: find ist ein stabiles und zuverlässiges Werkzeug, das genaue Ergebnisse liefert.

Optionen zum Filtern von Ergebnissen

Um deine Suchanfrage zu präzisieren und nur die gewünschten Ergebnisse zu erhalten, bietet der Befehl find eine Reihe von Optionen zum Filtern von Ergebnissen.

Dateinamenmuster

Verwende die Option -name <Muster>, um nach Dateien zu suchen, deren Name mit dem angegebenen Muster übereinstimmt. Wildcards wie * und ? können verwendet werden, um beliebige Zeichen bzw. einzelne Zeichen zu ersetzen.

Dateigröße

Filtere Ergebnisse basierend auf der Dateigröße mit den Optionen -size <operator> <Größe> und -size <Vergleichsgröße>c. Hierbei kann <operator> einer der folgenden Vergleiche sein: +, -, oder =. Die Größenangabe <Größe> kann in Bytes (B), Kilobytes (K), Megabytes (M) oder Gigabytes (G) ausgedrückt werden.

Dateityp

Suche nach Dateien eines bestimmten Typs mit der Option -type <Typ>. Die gültigen Typen sind:

  • f für normale Dateien
  • d für Verzeichnisse
  • l für symbolische Links
  • p für Pipes
  • s für Sockets

Änderungsdatum und Zugriffsdauer

Filtere Ergebnisse basierend auf dem Änderungsdatum oder dem Datum des letzten Zugriffs. Verwende die Optionen -mtime <Alter>, -atime <Alter> und -ctime <Alter>, wobei <Alter> die Anzahl der Tage, Stunden oder Minuten angibt, seit denen die Änderung, der Zugriff bzw. die Statusänderung erfolgte.

Beispielsweise sucht find /home -atime -1 nach Dateien im Verzeichnis /home, auf die in der letzten Stunde zugegriffen wurde.

Dateiberechtigungen

Verwende die Optionen -perm <Berechtigungen>, +perm <Berechtigungen> und -perm <Berechtigungen> zum Filtern von Ergebnissen basierend auf Dateiberechtigungen. <Berechtigungen> können in oktaler oder symbolischer Form angegeben werden.

Beispielsweise sucht find / -perm -u+r nach Dateien, auf die der Benutzer Leserechte hat.

Aktionen, die auf gefundene Dateien angewendet werden können

Sobald du die gesuchten Dateien mit dem Befehl find gefunden hast, kannst du verschiedene Aktionen auf sie anwenden. Nachfolgend sind einige nützliche Optionen aufgeführt:

Ausgabe von Informationen

  • -print: Gibt den Pfad jeder gefundenen Datei aus.
  • -ls: Zeigt detaillierte Informationen zu jeder gefundenen Datei an, ähnlich wie der Befehl ls -l.
  • -fprintf: Gibt die angegebene Formatzeichenfolge für jede gefundene Datei aus. Beispiel: -fprintf "%f;%s;%p\n" gibt den Dateinamen, die Größe und den Pfad aus.

Dateien bearbeiten

  • -delete: Löscht die gefundenen Dateien.
  • -exec: Führt den angegebenen Befehl auf jede gefundene Datei aus. Beispiel: -exec cp {} /backup kopiert die gefundenen Dateien in das Verzeichnis /backup.
  • -prune: Beendet die Suche für das aktuelle Verzeichnis, wenn eine bestimmte Bedingung erfüllt ist. Beispiel: -prune -empty überspringt leere Verzeichnisse.

Dateien verwalten

  • -copy: Kopiert die gefundenen Dateien an einen anderen Ort. Beispiel: -copy -target-directory /new/location
  • -move: Verschiebt die gefundenen Dateien an einen anderen Ort. Beispiel: -move -target-directory /new/location
  • -link: Erstellt einen symbolischen Link zu jeder gefundenen Datei. Beispiel: -link -target-directory /new/symlink

Denke daran, dass einige dieser Aktionen Administratorrechte erfordern können, insbesondere wenn sie auf Systemdateien angewendet werden.

Verwendung von ‚find‘ zur Suche nach bestimmten Kriterien

Mit ‚find‘ kannst du die Suche nach Dateien und Verzeichnissen anhand verschiedener Kriterien verfeinern. Hier erfährst du, wie du bestimmte Informationen wie Dateiname, Größe oder Datum verwendest, um deine Suche einzugrenzen.

Suche nach Dateien anhand von Dateinamen

Willst du eine Datei mit einem bestimmten Namen finden, verwende die Option -name. Gib den Namen der Datei in Anführungszeichen an, um Sonderzeichen zu vermeiden.

find . -name "my_file.txt"

Suche nach Dateien anhand von Größe

Die Option -size hilft dir, Dateien anhand ihrer Größe zu finden. Du kannst verschiedene Einheiten wie c (Byte), k (Kilobyte), M (Megabyte) oder G (Gigabyte) verwenden.

find . -size +10M # Dateien größer als 10 MB finden
find . -size -10c # Dateien kleiner als 10 Byte finden

Suche nach Dateien anhand von Typ

Mit -type kannst du nach Dateien oder Verzeichnissen suchen.

find . -type f # Dateien finden
find . -type d # Verzeichnisse finden

Suche nach Dateien anhand von Änderungsdatum oder Zugriffsdauer

Nutze -mtime oder -atime, um Dateien zu finden, die vor einer bestimmten Anzahl von Tagen zuletzt geändert oder darauf zugegriffen wurden.

find . -mtime -5 # Dateien finden, die in den letzten 5 Tagen geändert wurden
find . -atime +30 # Dateien finden, auf die in den letzten 30 Tagen nicht zugegriffen wurde

Suche nach Dateien anhand von Dateinamen, Größe oder Typ

Suche nach Dateinamen

Du kannst find verwenden, um Dateien nach ihrem Namen zu suchen. Verwende die Option -name, gefolgt vom Namen der gesuchten Datei. Beispiel:

find /home -name "myfile.txt"

Wenn du nach einem Teil eines Dateinamens suchen möchtest, verwende die Option -iname (ohne Groß-/Kleinschreibung). Beispiel:

find /home -iname "*text*"

Suche nach Dateigröße

Du kannst find verwenden, um Dateien nach ihrer Größe zu suchen. Verwende die Option -size, gefolgt von einem Größenwert und einer Einheit (z. B. k für Kilobyte, m für Megabyte oder g für Gigabyte). Beispiel:

find /home -size +100M

Dies sucht nach Dateien, die größer als 100 Megabyte sind.

Suche nach Dateityp

Du kannst find verwenden, um Dateien nach ihrem Typ zu suchen. Verwende die Option -type, gefolgt vom Dateityp (z. B. f für reguläre Datei, d für Verzeichnis oder l für Symlink). Beispiel:

find /home -type f

Dies sucht nach regulären Dateien im Verzeichnis /home.

Suche nach Dateien anhand des Änderungsdatums oder des Zugriffsdauer

Neben der Suche nach Dateien anhand ihres Namens, ihrer Größe oder ihres Typs kannst du mit find auch nach Dateien suchen, die innerhalb eines bestimmten Zeitraums geändert oder auf die zugegriffen wurde. Dies kann hilfreich sein, wenn du Dateien finden möchtest, die kürzlich aktualisiert oder verwendet wurden.

Suche nach Dateien anhand des Änderungsdatums

Um nach Dateien zu suchen, die innerhalb eines bestimmten Zeitraums geändert wurden, verwende die Option -mtime. Diese Option akzeptiert ein Argument, das die Anzahl der Tage angibt, die seit der letzten Änderung der Datei vergangen sind.

Beispiele

  • Suche nach Dateien, die in den letzten 24 Stunden geändert wurden:
find /path/to/directory -mtime 1
  • Suche nach Dateien, die in der letzten Woche geändert wurden:
find /path/to/directory -mtime 7
  • Suche nach Dateien, die vor mehr als 30 Tagen geändert wurden:
find /path/to/directory -mtime +30

Suche nach Dateien anhand des Zugriffsdauer

Um nach Dateien zu suchen, auf die innerhalb eines bestimmten Zeitraums zugegriffen wurde, verwende die Option -atime. Diese Option akzeptiert ein Argument, das die Anzahl der Tage angibt, die seit dem letzten Zugriff auf die Datei vergangen sind.

Beispiele

  • Suche nach Dateien, auf die in den letzten 24 Stunden zugegriffen wurde:
find /path/to/directory -atime 1
  • Suche nach Dateien, auf die in der letzten Woche zugegriffen wurde:
find /path/to/directory -atime 7
  • Suche nach Dateien, auf die vor mehr als 30 Tagen zugegriffen wurde:
find /path/to/directory -atime +30

Verwendung von ‚find‘ zur Suche nach Dateien in Unterverzeichnissen

Wenn du nach Dateien in einem bestimmten Unterverzeichnis suchen möchtest, kannst du die Option -mindepth verwenden. Diese Option gibt die minimale Tiefe der Verzeichnishierarchie an, in der du suchen möchtest. Hier ist ein Beispiel:

find /home/benutzer -mindepth 2 -name "config.txt"

Dieser Befehl sucht in allen Unterverzeichnissen von /home/benutzer nach Dateien mit dem Namen "config.txt".

Du kannst auch die Option -maxdepth verwenden, um die maximale Tiefe der Verzeichnishierarchie festzulegen, in der du suchen möchtest. Hier ist ein Beispiel:

find /home/benutzer -maxdepth 3 -name "config.txt"

Dieser Befehl sucht in den ersten drei Verzeichnisebenen unterhalb von /home/benutzer nach Dateien mit dem Namen "config.txt".

Wenn du sowohl nach einer minimalen als auch nach einer maximalen Tiefe suchen möchtest, kannst du die Optionen -mindepth und -maxdepth zusammen verwenden. Hier ist ein Beispiel:

find /home/benutzer -mindepth 2 -maxdepth 3 -name "config.txt"

Dieser Befehl sucht in den Verzeichnisebenen 2 und 3 unterhalb von /home/benutzer nach Dateien mit dem Namen "config.txt".

Mit find kannst du auch nach Dateien in Verzeichnissen mit bestimmten Namen suchen. Dazu kannst du die Option -path verwenden. Hier ist ein Beispiel:

find /home/benutzer -path "/home/benutzer/Dokumente/Projekte/*"

Dieser Befehl sucht nach allen Dateien in Verzeichnissen mit dem Namen "Projekte" im Verzeichnis "/home/benutzer/Dokumente".

Behandlung von Dateiberechtigungen bei der Suche

Der Befehl find ermöglicht es dir dank seiner umfangreichen Optionen, deine Suche auf bestimmte Dateiberechtigungen einzugrenzen. Damit hast du die Möglichkeit, präzise Abfragen zu erstellen und Dateien mit bestimmten Zugriffsrechten zu identifizieren.

Suche nach Benutzerberechtigungen

Verwende die Optionen -user und -group um eine Suche auf Dateien zu beschränken, die einem bestimmten Benutzer oder einer Gruppe gehören. Dies kann z.B. hilfreich sein, um Dateien zu finden, die du selbst erstellt hast, oder um die Berechtigungen von Dateien zu überprüfen, an denen gemeinschaftlich gearbeitet wird.

Suche nach Zugriffsberechtigungen

Mit den Optionen -perm und -perm kannst du Dateien anhand ihrer Zugriffsberechtigungen filtern. Dabei kannst du sowohl die exakten Berechtigungen als auch Muster angeben.

Berücksichtigung von Dateiberechtigungen

Denke daran, dass find deine eigenen Dateiberechtigungen berücksichtigt. Das bedeutet, dass du möglicherweise keine Ergebnisse erhältst, wenn du nach Dateien mit Berechtigungen suchst, auf die du keinen Zugriff hast. Um dieses Problem zu umgehen, kannst du die Option -ignore_readdir_race verwenden, die Dateiberechtigungen ignoriert und die Suche erzwingt.

Beispiele zur Verwendung

Hier sind einige Beispiele dafür, wie du Dateiberechtigungen bei der Suche mit find verwenden kannst:

  • Dateien finden, die du besitzt:

    find / -user $(whoami)
    
  • Dateien finden, die der Gruppe "users" gehören:

    find / -group users
    
  • Dateien finden, die die Berechtigungen "755" haben:

    find / -perm 755
    
  • Dateien finden, die die Berechtigungen "rwxr-xr-x" haben:

    find / -perm /rwxr-xr-x/
    

Durch die Berücksichtigung von Dateiberechtigungen bei deiner Suche kannst du deine Abfragen präzisieren und genau die Dateien identifizieren, nach denen du suchst.

Begrenzung der Suche auf bestimmte Verzeichnisse

Wenn du deine Suche auf bestimmte Verzeichnisse beschränken möchtest, kannst du die Option -path verwenden. Mit dieser Option kannst du ein bestimmtes Verzeichnis oder einen Pfad als Argument angeben. find durchsucht dann nur die angegebenen Verzeichnisse und ihre Unterverzeichnisse.

Verwendung von -path

Um -path zu verwenden, gib den vollständigen Pfad zum Verzeichnis an, in dem du suchen möchtest. Du kannst auch Platzhalter wie * und ? verwenden, um Teilzeichenfolgen im Pfad abzugleichen.

find -path "/home/benutzer/Dokumente/*"

Dieser Befehl sucht nach allen Dateien und Verzeichnissen, die der Teilzeichenfolge Dokumente im Pfad entsprechen.

Ausschließen von Verzeichnissen

Wenn du Verzeichnisse von der Suche ausschließen möchtest, kannst du die Option -prune verwenden. Diese Option weist find an, die Durchsuchung eines Verzeichnisses abzubrechen, sobald es erreicht ist.

find -path "/home/benutzer" -prune -o -print

Dieser Befehl sucht nach allen Dateien und Verzeichnissen im Verzeichnis /home/benutzer, schließt aber das Verzeichnis /home/benutzer selbst von der Suche aus.

Kombination von -path und -prune

Du kannst die Optionen -path und -prune kombinieren, um gezieltere Suchvorgänge durchzuführen. Beispielsweise kannst du nach allen Dateien und Verzeichnissen in einem bestimmten Verzeichnis suchen, aber Unterverzeichnisse mit einem bestimmten Namen ausschließen.

find -path "/home/benutzer/Projekte/*" \
-prune -o -name "projekt1" -print

Dieser Befehl sucht nach allen Dateien und Verzeichnissen im Verzeichnis /home/benutzer/Projekte, schließt aber alle Unterverzeichnisse mit dem Namen projekt1 von der Suche aus.

Ausnahmen vom Suchbereich angeben

Wenn du bestimmte Verzeichnisse oder Dateien von der Suche ausschließen möchtest, kannst du die Option -prune verwenden. Dies ist besonders nützlich, wenn du große Verzeichnisse oder Verzeichnisse mit vielen Unterverzeichnissen durchsuchst.

-prune-Option

Die Option -prune weist find an, die angegebene Bedingung zu überprüfen und die Suche zu beenden, wenn die Bedingung erfüllt ist. Die Syntax lautet:

-prune -[Optionen] [Ausnahmepfad]

Hier sind einige Beispiele für die Verwendung der Option -prune:

  • Alle versteckten Dateien und Verzeichnisse ausschließen:
find / -prune -type f
  • Alle Dateien und Verzeichnisse im Verzeichnis "/tmp" ausschließen:
find / -prune -path "/tmp"

-xdev-Option

Die Option -xdev weist find an, die Suche nicht auf andere Dateisysteme auszudehnen. Mit anderen Worten, die Suche bleibt auf dem aktuellen Dateisystem beschränkt. Dies kann nützlich sein, um die Suchzeit zu verkürzen, wenn du nur Dateien auf einem bestimmten Dateisystem suchen möchtest.

Die Syntax lautet:

-xdev

Beispiel für die Verwendung der Ausnahmen

Angenommen, du möchtest alle Dateien im Verzeichnis "/home" und seinen Unterverzeichnissen finden, aber du möchtest die Verzeichnisse "/home/user1" und "/home/user2" von der Suche ausschließen. Du kannst dies mit folgendem Befehl tun:

find /home -prune -path "/home/user1" -o -prune -path "/home/user2" -o -type f

Dieser Befehl weist find an, die Suche in den Verzeichnissen "/home/user1" und "/home/user2" abzubrechen und nur nach regulären Dateien im Verzeichnis "/home" und seinen verbleibenden Unterverzeichnissen zu suchen.

Schreibe einen Kommentar