L i n u x    B e f e h l    find

  1. Einführung

    1. Definition des Befehls

      Der (interaktive) Befehl find wird dazu verwendet, um nach Dateien oder Verzeichnissen mit gewissen Merkmalen (Optionen vom Typ TEST) zu suchen. In Kombination mit Optionen vom Typ ACTION ermöglicht find dem Anwender, in einer Kommandozeile Zieldateien zu bearbeiten.

    2. Kommando Version

      find --version
      zeigt an, welche Version des Kommandos find vom System aufgerufen wird.

      Linux cmd find --version
      Screenshot: Anzeige der aufgerufenen Programmversion

    3. Kommando Syntax

      ALLGEMEINE SYNTAX
      find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]

      ERLÄUTERUNG DER EINZELNEN OPTIONEN

      ARGUMENTE [-H] [-L] [-P]

      bestimmt darüber, wie Links (anstatt echter Dateien oder Verzeichnisse) behandelt werden.

      • Argument -P bedeutet "folge niemals symbolische Links". Er ist Standard.
        Link-Datei werden für sich betrachtet und behandelt.

      • Argument -L bedeutet "folge immer symbolische Links".
        Während der Suche betrachtet find nicht die Link-Datei selbst, sondern die Datei, auf die sie hinweist - außer find kann den Link nicht dereferenzieren (gebrochener Link, keine Zugriffsrechte, usw.). Insbesondere gelten folgende Umstände:

        • Falls der Link auf ein Verzeichnis hinweist, wird dieses Verzeichnis in die Suchmenge aufgenommen.
        • Option -type bezieht sich nicht, auf die Link-Datei selbst, sondern auf das, worauf der Link hinweist.

      • Argument -H ist weitgehend äquivalent mit Option -P ("folge keine symbolische Links"). Eine Ausnahme gilt jedoch, wenn die Link-Datei im [starting-point] Bereich der Kommandozeile eingetragen wurde. Insbesondere sollte die Link-Datei in der Kommandozeile auf ein Verzeichnis referenzieren, wird das Verzeichnis durchsucht.

      Sollten mehrere Optionen H, L oder P vorhanden sein, gilt immer die in Schreibrichtung zuletzt eingetragen Option.

      ARGUMENT -D

      Falls find andere Ergebnisse liefert, als der User erwartet, kann er Debug-Optionen eingeben. Liste und Kurzerklärung dazu erhält er via -D help. Ich vermute, die Option wird in erster Linie von Entwicklern des Kommandos genutzt.

      ARGUMENT -Olevel

      Über verschiedene Grade der Optimierung (Werte 1 bis 3) kann der User möglicherweise auf die Dauer der Bearbeitung Einfluss nehmen. Bei gleichbleibenden Ergebnissen. Ich vermute, die Option wird in erster Linie von Entwicklern des Kommandos genutzt.

      ARGUMENT [starting-point...]

      Wurzelverzeichnis der untersuchten Baumstruktur.
      Es können mehrere Verzeichnisse eingegeben werden, die nacheinander behandelt werden.
      Wenn kein "starting-point" eingetragen wurde, startet find die Suche ab dem laufenden Verzeichnis, auch mit einem Punkt (.) bezeichnet.

      ARGUMENT [expression]

      • Durch Angabe von Merkmalen (z.B. Namensmuster, Bedingungen in Bezug auf Daten der Aufstellung, Änderung, usw.) wird die Suche nach den richtigen Namen gesteuert (Filtereffekt).
      • Durch Angabe von Aktionen können alle einzelnen Ergebnisse bearbeitet werden. Dies ist insbesondere der Fall, wenn find über das Argument -exec mit weiteren Kommandos kombiniert wird. Beispielsweise, wenn kombiniert mit dem Stream Editor sed, kann der User in einem Rutsch alle gefundenen Elemente ändern.

      find erkennt den Anfang des Bereichs [expression] (bzw. das Ende des Bereiches [Starting-point]), wenn ein Argument beginnend mit ( - ), ( ( ) oder ( ! ) identifiziert wird. Wenn [expression] leer ist, übernimmt find standardmäßig -print.

      Innerhalb des Bereiches [Expression] gibt es verschiedene Optionskategorien:

      1. STELLUNGSABHÄNGIGE (POSITIONAL) OPTIONEN

        Solche Optionen wirken nur für Tests, die nachstehend definiert werden. Erwähnenswert ist Option -daystart, die nachstehende Optionen -amin -atime -ctime -mmin -mtime steuert: Die Referenzzeit wird auf heute null Uhr gesetzt, anstatt 24 Stunden vorher. Beispiel:

        • find -ctime -2 -iname "*.txt" -printf "%CY-%Cm-%Cd %CH:%CM %f\n"
          Die Erklärung: Finde Dateien, deren Name dem Muster "*.txt" (-iname "*.txt") entspricht und die innerhalb der letzten 2 Tage geändert wurden (-ctime -2). In dieser Zeitrechnung ist heute der Tag [0], Gestern der Tag [-1] und Vorgestern der Tag [-2].

          Beispiel: find ohne Option -daystart
          Beispiel: find ohne Option -daystart

        • find -daystart -ctime -2 -iname "*.txt" -printf "%CY-%Cm-%Cd %CH:%CM %f\n"
          Die Erklärung ist dieselbe wie im vorherigem Beispiel.

          Beispiel: find mit Option -daystart
          Beispiel: find mit Option -daystart

          Der Unterschied (-daystart) bewirkt, dass der heutige Tag ganz hinzugerechnet wird. In dieser Zeitrechnung ist heute der Tag [-1] und Gestern der Tag [-2].

      2. GLOBAL WIRKENDE OPTIONEN

        Solche Optionen wirken unabhängig von ihrer Position in [Expression]. Um die Lesbarkeit des Kommandos zu erhöhen, empfehlen die Entwickler solche Option immer an erster Stelle zu schreiben - ansonsten zeigt find eine Warnung an.

      3. Optionen vom Typ TESTS

        Optionen von diesen Typ stellen den eigentlichen Filter dar, anhand dessen nur die Namen (je nach dem Dateien oder Verzeichnisse) ausgesiebt werde, die von Interesse sind.

      4. Optionen vom Typ ACTIONS

        Optionen von diesem Typ ermöglichen eine Bearbeitung der Ausgabe. Dabei sind verschiedene Ebene denkbar.
        BEISPIELE

        1. Standardmäßig - via ACTION -print - wird nur den Namen eines jeden Ergebnisses ausgegeben. Über Aktionen wie z.B. -printf kann der Umfang der ausgegebenen Daten erheblich erhöht werden z.B. Datum des letzten Änderung, File System Bezeichnung, Zugriffsrechte, Speicherplatz, usw.

        2. Über Optionen wie -exec, -delete ist es dem User unmittelbar möglich, die gefundenen Elemente in einem Rutsch zu manipulieren. Dadurch wird dieses Kommando sehr mächtig und flexibel.

      5. OPERATOREN

        Logische Operatoren ermöglichen es, Optionen zu kombinieren, um komplexe Bedingungen zu formulieren.

        -a
        -and

        Operator UND
        Alle mit dem Operator 'UND' verlinkten Bedingungen MÜSSEN GLEICHZEITIG gelten, damit die Suche als erfolgreich erachtet wird.

        Falls mehrere Bedingungen ohne Operatoren verknüpft werden, wird die UND-Verbindung standardmäßig angenommen.

        -o
        -or

        Operator ODER
        Mindestens eine der verlinkten Bedingungen MUSS GELTEN, damit die Suche als erfolgreich erachtet wird .

        Die 'ODER'-Verknüpfung fordert eine Gruppierung der Bedingungen via Klammer \( und \)

        !

        Operator NEGATION
        Die mit dem Operator NEGATION versehene Bedingungen DARF NICHT gelten, damit die Suche als erfolgreich erachtet wird .

        -regex
        -iregex

        Ermöglicht die Zusammenstellung von Bedingungsmustern nach der sogenannten regex (regular expression) Syntax.
        Option -iregex (im Gegensatz zu -regex) unterscheidet nicht zwischen dem Groß- und Klein- Buchstabieren.
        Für weitere praktische Informationen zur Syntax siehe z.B. Baeldung: Tutorial: Using regular expression in command find

        BEISPIELE von find mit mehreren Bedingungen

        1. BEISPIEL find -type f -iname "*.txt" -iname "*notizen*" -print
          Suche im Arbeitsverzeichnis (working directory) - und in allen dazugehörigen Unterverzeichnissen - Dateien, deren Namen folgendem Muster genügen: Die Dateinamen haben die 'txt' Endung (Erweiterung) UND sie enthalten das Wort 'Notizen'
          Es wird nicht zwischen Groß- und Klein-buchstaben unterschieden: Die Dateien mit den Namen 'notizen.txt', 'Notizen.TXT', 'Die_Notizen_2023.tXt' erfüllen die Bedingungen. Will man zwischen Groß- und Klein- Buchstaben unterscheiden, wird Option -name - anstatt -iname - herangezogen.

        2. BEISPIEL find -type f \( -iname "*.txt" -o iname "*.png" \) -print
          Suche im Arbeitsverzeichnis (working directory) - und in allen dazugehörigen Unterverzeichnissen - Dateien, deren Namen folgendem Muster genügen: Die Dateinamen haben entweder die 'txt' Endung (Erweiterung) ODER die 'png' Endung.
          Die Dateien mit den Namen 'meine_Notizen.txt', 'meine_Notizen.TXT', 'mein_Bild_1.png', 'mein_Bild_2.PNG' entsprechen dem Muster.

          Die ex-formatierten (escaped) Klammer \( und \) müssen jeweils mit Leerstellen vom Rest der Kommandokette getrennt werden, ansonsten werden sie nicht als solche erkannt werden.

        3. BEISPIEL find -type f -iname "*.txt" ! \( -iname "*notizen*" \) -print
          Suche im Arbeitsverzeichnis (working directory) - und in allen dazugehörigen Unterverzeichnissen - Dateien, deren Namen folgendem Muster genügen: Die Dateinamen haben die 'txt' Endung (Erweiterung), sie enthalten jedoch das Wort 'Notizen' NICHT.

    4. Praxisorientierte Beispiele

      1. BEISPIEL find /home/akh -maxdepth 2 -iname "*.txt" -type f -print

        Listet alle TXT-Dateien im Home-Verzeichnis von User akh auf. Die Suchtiefe ist auf 2 Verzeichnisebenen begrenzt. Tiefer liegende Unterverzeichnisse werden ignoriert. Ist der aktuelle User akh, verkürzt sich die Syntax: find ~ -maxdepth 2 -iname "*.txt" -type f -print

        Zu beachten ist, dass der Befehl ausführende User genügend Rechte hat. Ausserhalb des eigenen Home-Verzeichnisses muss in vielen Fällen der Befehl von einem User mit erweiterten Rechten aufgerufen werden - z.B. dem Root-User via sudo.

        Linux cmd find file maxdept iname
        Screenshot: suche nach Dateien über Optionen: maxdepth, iname

        Erläuterung der einzelnen Argumente:

        /home/akh

        Wurzelverzeichnis der Suche (d.h. [starting point])
        Standardmäßig durchsucht find alle Unterverzeichnisse innerhalb des eingegebenen Verzeichnisses

        Manche Verzeichnisse könne verkürzt dargestellt werden:

        • Das Wurzelverzeichnis des Systems (root directory) ist mit einem Bruchstrich (/) gekennzeichnet.
        • Das laufende Verzeichnis (current oder working directory) ist mit einem Punkt (.) gekennzeichnet.
        • Das Wurzelverzeichnis des Users (home directory) ist mit einem Tilde (~) gekennzeichnet.

        Tab. Argumente zur Bestimmung des Startpunktes der Suche

        -maxdepth 2

        Die Option schränkt den Suchradius auf Unterverzeichnisse bis zum Niveau -2 ein.

        1. -maxdepth 0
          Es wird kein Verzeichnis unternommen. Die Option gilt nur für Testzwecke (Syntaxprüfung?).
        2. -maxdepth 1
          Es werden keine Unterverzeichnisse untersucht, sondern nur Namen im eingegebenen Verzeichnis.
        3. -maxdepth 2
          Die Suche gilt nur für das eingegebene Verzeichnis und seine Unterverzeichnisse. Alle tiefer gelegenen Verzeichnisse werden ignoriert.

        Beachte: Die Option muss als erste Option eingegeben werden, ansonsten wird eine Warnung herausgegeben.

        -type f

        f wie File. Nur Dateien werden betrachtet.

        Umgekehrt sollten nur Verzeichnisse in Betracht gezogen werden, wird stattdessen -type d eingegeben.

        -iname

        Bestimmt ein Muster, das auf die Namen der gesuchten Dateien zutrifft.
        Im Gegensatz zu -name übersieht -iname den Unterschied zwischen Groß- und Klein- Buchstaben (was in meiner Praxis den wichtigeren Anwendungsfall darstellt).

        Tab. Argumente vom TYP TEST.

        -print

        Jeder Name der Ergebnisliste wird vollständig angezeigt. Ein Name pro Zeile auf dem Standardausgabe.

        Für Dateien, in deren Namen das Zeichen Newline vorkommt, ist diese Option ungeeignet - statt dessen sollte man -print0 nutzen (Anstatt das Zeichen Newline nach jedem Suchergebnis anzuhängen, verwendet find das Zeichen Null.)

        Tab. Argumente vom TYP ACTION.

      2. BEISPIEL find -iname "*titi*" -type f -mtime -5 -print

        Listet Dateien (keine Verzeichnisse) auf, die folgende Bedingungen erfüllen:

        1. Stillschweigend vorausgesetzt: Die Datei liegt im laufenden Verzeichnis oder in Unterverzeichnissen davon.
        2. Option -iname "*titi*":
          Der Name der Datei enthält die Zeichenkette titi, unabhängig von der Schriftart (font case). Das heißt, dass Z.B. die Dateien Der_titi_huk.txt, Nur_TiTi_alle.html, TITI.exe die Bedingung erfüllen.
        3. Option -mtime -5:
          Die Datei wurde innerhalb der letzten 5 Tagen geändert.

        Mehr Informationen zu den Optionen im nachstehenden Kapitel "Optionen vom Type Test"

      3. BEISPIEL find -iname "*titi*" -type f -newermt "2022-06-01" -print

        Listet Dateien (keine Verzeichnisse) auf, die folgende Bedingungen erfüllen:

        1. Die Datei liegt im laufenden Verzeichnis oder in Unterverzeichnissen davon.
        2. Option -iname "*titi*":
          Der Name der Datei enthält die Zeichenkette titi, unabhängig von der Schriftart (font case).
        3. Option -newermt "2022-06-01" :
          Die Datei wurde zuletzt nach dem 01. Juni 2022 geändert.

        Mehr Informationen zu den verwendeten Optionen im nachstehenden Kapitel "Optionen vom Type Test"

  2. Optionen vom Typ TEST

    1. TABELLE mit Beispielen

      -mtime
      -ctime
      -atime

      -mmin
      -cmin
      -amin

      Option -mtime steht für "last modified time" (Zeitpunkt der letzten Änderung).
      BEISPIEL find / -mtime +50 -mtime -100 sucht im gesamten System Dateien, deren letzte Änderung zwischen 50 und 100 Tage zurückliegt.

      • Die Zahlen (50, 100) entsprechen einer Zeitspanne in Tagen.
      • Das + und das - Zeichen grenzen den Zeitraum relativ zum Zeitpunkt "jetzt" ab. + steht für "mehr als" und - steht für "weniger als" soundsoviel Tage in der Vergangenheit.

        Fraktionswerte sind zulässig.
        BEISPIEL -mtime -0.5 sucht Namen, deren Änderung weniger als einen halben Tage bzw. 12 Stunden zurückliegt.

      Ähnlich wie -mtime (m=modified), sind weitere Optionen verfügbar:

      1. -ctime (c=created, Zeitpunkt der Erzeugung)
      2. -atime (a=accessed, Zeitpunkt des letzten Zugriffs).

      Ähnlich wie -mtime (time=Zeit in Tagen), ist Option -mmin (min=Zeit in Minuten) verfügbar - die ähnlich dekliniert wird: -cmin, -amin.

      -newermt

      Option -newermt funktioniert ähnlich wie -mtime.

      Anstatt die Zeit relativ zum jetzigen Zeitpunkt zu bestimmen, erwartet -newer(m)(t) ein absolutes Datum im amerikanischen Format ("JJ-MM-TT")

      BEISPIEL find ~/Dokumente -type f -newermt "2022-06-17" [-print] listet alle Dateien im Unterverzeichnis /Dokumente des Home-Verzeichnisses, deren letzte Änderung (mt=modification time) nach dem 01. Juni 2022 (newer) statt fand.

      Linux cmd find file newermt
      Screenshot: find Dateien über Option newermt

      -maxdepth
      -mindepth

      Option -maxdepth maxWert beschränkt die Suche innerhalb der Verzeichnisstruktur auf naheliegende Ebenen ab dem Startverzeichnis (=Ebene 1). Tiefer gelegene Unterverzeichnisse (ab Ebene maxWert+1) werden ignoriert.

      Ähnlich funktioniert die Option -maxdepth minWert aber am umgekehrten Ende der Verzeichnisstruktur. Nur tief gelegene Unterebenen des Startverzeichnisses (ab Ebene minWert) werden in Betracht gezogen.

      -perm

      Option -perm filtert Elemente (Dateien, Verzeichnissen) mit bestimmten Zugriffsrechten (permissions) für die Kategorien owner, group und others - wie sie in der Unix-Welt vergeben werden. Die Option unterstützt unterschiedliche Schreibweisen, die in Kombination eine große Flexibilität der Formulierung ermöglicht.

      1. Die zu prüfenden Zugriffsrechte können in Form einer dreistelligen Oktalzahl - eine Zahl für jede Kategorie user, group, others - oder in symbolischer Form (z.B 644 = u+rw, g+r, o+r, oder u+w, a=+r) beschrieben werden.

        BEISPIELE mit Oktalzahlen

        1. 644:
          user hat Schreib- [+2] und Lesezugriff [+4], group und others haben Lesezugriff [+4]
        2. 641:
          user hat Schreib- [+2] und Lesezugriff [+4], group hat Lesezugriff [+4], others hat durchführen-Zugriff [+1]

        BEISPIELE in symbolischer Form
        1. u+w (user hat Schreibzugriff),
        2. g+r (group hat Lesezugriff),
        3. o+x (others hat durchführen-Zugriff).

        In der symbolischen Schreibweise werden mehrere Bedingungen mit einem Komma (,) getrennt (bzw. verbunden).

      2. Vor den Bedingungen wird entweder nichts () oder ein Minus-Zeichen (-) oder ein Schrägstrich (/) gesetzt. Dies entscheidet darüber, wie die beschriebenen Rechte kombiniert werden.

        BEISPIELE

        1. find -type f -perm 664 -printf "%m %p \n"
          Das Kommando zeigt Dateien im laufenden Verzeichnis mit folgenden Zugriffsrechte:

          • user und group haben Schreib- und Lese- Zugriff.
          • others hat Lesezugriff. .
          • Andere zusätzliche Rechte dürfen für keine gewährleistet werden.
            Hat z.B. others zusätzlich Schreibrechte, wird das Element aus der Lösungsmenge verworfen.

          Die Option (ACTION) -printf "%m %p \n" dient der Protokollierung (Oktalwert der Zugriffsrechte, vollständiger Name der Datei).

        2. find -type f -perm -664 -printf "%m %p \n"
          Das Kommando zeigt Dateien im laufenden Verzeichnis mit folgenden Zugriffsrechte:

          • user und group haben Schreib- und Lese- Zugriff.
          • others hat Lesezugriff.
          • Für alle Kategorien (user, group, others) müssen zumindest die beschrieben Zugriffsrechte gelten, damit das Element zur Lösung gehört.

        3. find -type f -perm /664 -printf "%m %p \n"
          Das Kommando zeigt Dateien im laufenden Verzeichnis mit folgenden Zugriffsrechte:

          • user und group haben Schreib- und Lese- Zugriff.
          • others hat Lesezugriff.
          • Wenn eine Bedingung für eine Kategorie (user, group, others) gilt, gehört das Element zur Lösung.

        ⇒ In den meisten Fällen wird die Syntax mit dem Minus-Zeichen (-perm -664) geeignet sein.

        Die Syntax mit dem Schrägstrich ist jedoch zu empfehlen, um Bedingungen zu negieren. Die nachfolgenden Kommandos tun alle das Gleiche.

          find -type f ! -perm /111 -printf "%m %p \n"
          find -type f \( ! -perm /111 \) -printf "%m %p \n"
          find -type f ! -perm /a+x -printf "%m %p \n"
          find -type f \( ! -perm /a+x \) -printf "%m %p \n"

        Sie suchen Dateien für die, der durchführen-Zugriff (executable-bit) nirgends gesetzt ist.
        BEACHTE:
        Die Klammer () werden zur Begrenzung eines Ausdruckes verwendet. Der Schrägstrich davor vermeidet ein unwillkommenes Einmischen des Shell-Interpreters in die Kommandobearbeitung.

      Tab. Ausgewählte Argumente vom Typ TEST

    2. WEITERE BEISPIELE zu Optionen vom Typ TEST

      1. BEISPIEL find -type f -mtime 0
        sucht alle Dateien im laufenden Verzeichnis (und Unterverzeichnissen), die innerhalb der letzten 24 Stunden modifiziert wurden.

  3. Optionen vom Typ ACTION

    1. ACTION -exec

      SYNTAX
      find [Startverzeichnis...] {Argumente vom Typ TEST} -exec '{Zugriffsprogramm + Optionen}' {} \;

      BESCHREIBUNG
      Option -exec ermöglicht den Zugriff auf jedes einzelne Ergebnis während der Ausführung des Kommandos. {Zugriffsprogramm} ist ein beliebiges Programm. Jedes einzelne Element der Ergebnismenge von find wird via den Token {} dargestellt. Token \; schließt das Kommando. (Das Schließen des Kommandos ist unbedingt erforderlich.)

      BEACHTE:
      Die einfachen Anführungszeichen um die Klammer ('{}') und der Schrägstrich vor dem Semikolon \; sollen die bash-Shell daran hindern, die Ausdrücke im Vorfeld zu interpretieren.

      BEISPIELE
      1. BEISPIEL find -type f -iname "*.txt" -exec grep -E -i -l 'Aktionärsnummer' {} \;
        sucht alle TXT-Dateien (mit Erweiterung .txt, ohne auf Groß- oder Klein- Buchstaben zu achten) im laufenden Verzeichnis, in welchen die Zeichenkette Aktionärsnummer auftritt.

        Die Option -l der grep-Implementatierung auf meinem Kubuntu System bewirkt, dass nur der Dateiname ausgegeben wird, wenn es einen Treffer gibt. Standardmäßig werden alle zutreffenden Zeilen aus den untersuchten Dateien angezeigt, ohne jedoch die Dateien zu nennen.

      2. BEISPIEL find -type f -iname "*.txt" -exec grep -E -i -c 'Aktionärsnummer' {} \; -print
        führt die gleichen Operationen, wie im vorstehenden Beispiel: sucht nach einem bestimmten Muster in einer Menge von Dateien, die vom Befehl find definiert wurde.

        Der Output wird jedoch anders bestimmt: Option -c zeigt die Zahl des Auftretens vom gesuchten Muster. Option -print am Ende erzwingt die Ausgabe des Dateinamens. Damit wird für jede untersuchte Datei folgendes in der Reihenfolge gezeigt: -1- wie oft das gesuchte Muster auftritt -2- der Name der untersuchten Datei. Beachte, dass auch untersuchte Dateien ohne das gesuchte Muster (Zahl = 0) ausgegeben werden.

      3. BEISPIEL find -type f -iname "*.html" -exec sed -i 's/toto/titi/gI' {} \;
        sucht alle html-Dateien im laufenden Verzeichnis (und Unterverzeichnissen) und ggf. ersetzt in den gefundenen Dateien alle vorhandenen Zeichenketten toto mit der Zeichenkette titi.

        Das Kommando entspricht einer Verkettung von find mit sed. Die Verbindung erfolgt über den Token -exec. Er stellt sicher, dass jedes Ergebnis von find (d.h. jede gefundene Datei) via den "Platzhalter" {} als Eingabeparameter an das Programm sed weitergeleitet wird.

        sed steht für stream editor.
        Es ermöglicht eine Textdatei über Kommandozeile zu bearbeiten. Solche Bearbeitung wird über "Aktionen" gesteuert. Z.B. wird Aktion s/regexp/replacement/ dazu verwendet, um die Reguläre Expression regexp - wenn erkannt - mit replacement zu ersetzen.

        ANMERKUNGEN zu sed/substitute

        1. Die sed-Option -i bzw. --in-place bewirkt, dass der geänderte Text in die ursprüngliche Datei zurück geschrieben wird - anstatt in die Standard-Ausgabe weitergeleitet zu werden.
        2. Die Option g im Substitutionsausdruck (s//g) bewirkt, dass alle erkannten Strings in einer Zeile ersetzt werden (nicht nur der erste String).
        3. Die Option I im Substitutionsausdruck (s//I) bewirkt, dass das Muster unabhängig von der Schriftart, groß oder klein, (case insensitive) erkannt wird.

        Siehe z.B. Ubuntu manpage: sed für mehr Informationen zur Syntax der Implementierung auf meinem Linux System.

      4. BEISPIEL find -type f -iname "*.html" -exec rename -v 's/ /_/g' {} \;
        sucht alle HTML-Dateien im laufenden Verzeichnis. Jedes Leer-Zeichen im Namen der gefundenen Dateien wird ggf. mit einem Unterstrich ersetzt.

        ANMERKUNGEN zu rename

        1. Das Kommando rename muss u.U. neu installiert werden (z.B. via sudo apt install rename). Möglicherweise gibt es mehrere unterschiedliche Implementierungen von rename in der Linux-Welt. Um Informationen zur installierten Version zu erhalten, rufe man die manpage auf (man rename): Auf meinem System ⇒ manpage rename.
        2. In der Implementierung auf meinem Linux System ist der Substitutionsausdruck s/ /_/g ein Perl-Ausdruck. Jeder Perl-Ausdruck ist zulässig.
        3. Die Option -v von Kommando rename steht für "verbose" (geschwätzig).

      ALTERNATIVE zur Option -exec :
      Anstatt der Option (ACTION) -exec bewirkt eine Kommandoverkettung von find mit xargs Ähnliches.

      • BEISPIEL (a) läßt sich so umschreiben: find -iname "*.html" -type f -print | xargs sed -i 's/toto/titi/gI'
      • BEISPIEL (b) läßt sich so umschreiben: find -iname "*.html" -type f -print | xargs rename -v 's/ /_/g'

    2. ACTION -delete

      SYNTAX
      find [Startverzeichnis...] {Argumente vom Typ TEST} -delete

      BESCHREIBUNG
      Option -delete löscht jedes gefundene Element aus.

      BEISPIELE

      1. (1) find -maxdepth 1 -iname "*.txt" -type f -delete
        löscht alle TXT-Datei aus dem laufenden Verzeichnis. Die Unterverzeichnisse bleiben dagegen unberührt, weil nur Ebene 1 (-maxdepth 1) des Verzeichnisbaumes aktiv untersucht wird.

        Allerdings schweigt das Kommando (1) über das, was getan wurde. Wer eine Liste der gelöschten Dateien anzeigen lassen will, soll, statt der Option -delete, die äquivalente Option -exec rm -v (remove verbose) verwenden.
        (2) find -maxdepth 1 -iname "*.txt" -type f -exec rm -v {} \;

        Wer im Vorfeld wissen will, welche Dateien gelöscht würden, ohne das Löschen durchzuführen, - das sogenannte "dry-run" - , tippe Folgendes ein
        (3) find -maxdepth 1 -iname "*.txt" -type f -exec echo 'rm -v' {} \;

    3. ACTION -printf

      SYNTAX
      find [Startverzeichnis...] {Argumente vom Typ TEST} -printf [Format-optionen...]

      BESCHREIBUNG
      Die (standardmäßig gesetzte) Option -print zeigt den vollständigen Namen jeder gefundenen Elemente (Dateien, Verzeichnisse) an. Um zusätzliche (vom User bestimmte) Merkmale der gefundenen Elemente (Dateien, Verzeichnisse) zu zeigen, wird Option -printf [Formatoptionen...] verwendet.

      BEISPIELE

      1. find -iname "*.html" -type f -printf "%TY-%Tm-%Td %TH:%TM %p \n"
        sucht alle HTML-Dateien im laufenden Verzeichnis - und Unterverzeichnissen - und zeigt folgende ihrer Merkmale in derselben Reihenfolge:

        1. Datum und Uhrzeit der letzten Änderung: Jahr(%TY)-Monat(%Tm)-Tag(%Td) Stunde(%TH):Minute(%TM)
        2. Vollständiger Name (%p)
        Token \n (Neue Zeile) sorgt dafür, dass pro Zeile nur eine Datei angezeigt wird.

        Der Token %T bezieht sich auf die letzte Änderung des gefundenen Elementes.
        Die Token %A und %C beziehen sich auf den letzten Zugriff.

      2. find -iname "*.html" -type f -printf "%s \t %p \n"
        sucht alle HTML-Dateien im laufenden Verzeichnis - und Unterverzeichnissen - und zeigt folgende ihrer Merkmale in derselben Reihenfolge:

        1. Speichergröße des Elements in bytes (%s)
        2. Vollständiger Name des Elementes (%p)
        Token \t (Tabulator) und \n (Neue Zeile) dienen einzig der Formatierung der Ausgabe.

  4. Weiterführende Links

    Englischsprachige Quellen

    1. Ubuntu manpages: find
    2. Linux manpages: find
    3. find: 35 practical examples of use
    4. How to use the find cmd in Linux
    5. Find and sort files based on time