16 Praktische Beispiele für den Linux Find Befehl
Find ist einer der am häufigsten verwendeten Linux-Befehle und bietet eine Vielzahl von Funktionen in Form von Befehlszeilenoptionen. In diesem Tutorial, das sich an Anfänger richtet, werden wir die grundlegende Verwendung des find Befehls sowie einige der nützlichen Befehlszeilenoptionen, die er bietet, diskutieren.
HINWEIS: Sofern nicht anders angegeben, verwenden wir die folgenden Dateien für alle unsere find-Befehlsbeispiele in diesem Tutorial.
1. Wie listet man alle Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen auf?
Mit dem Befehl find können Sie schnell alle Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen auflisten. Dazu müssen Sie den Befehl nur ohne Argumente oder Optionen ausführen.
find
Hier ist die Ausgabe in unserem Fall:
Natürlich müssen Sie den vollständigen Pfad angeben, wenn das Verzeichnis, dessen Inhalt Sie auflisten möchten, nicht Ihr aktuelles Verzeichnis ist.
2. So suchen Sie eine Datei nach ihrem Namen
Wenn Sie möchten, können Sie mit dem Befehl find nach einer bestimmten Datei anhand ihres Namens suchen. Mit der Befehlszeilenoption -name können Sie dies tun. Hier ist die Syntax:
find [dir-path] -name [filename]
Der folgende Befehl durchsucht beispielsweise das aktuelle Verzeichnis nach einer Datei namens’testfile1.txt‘.
find . -name testfile1.txt
Hier ist die Ausgabe
Ebenso können Sie nach der Datei in einem anderen Verzeichnis suchen. Wenn das Verzeichnis ein Unterverzeichnis Ihres aktuellen Arbeitsverzeichnisses ist, dann müssen Sie nichts tun, da der Befehl find automatisch in allen Unterverzeichnissen sucht.
Aber wenn es sich um ein separates Verzeichnis handelt, dann müssen Sie den vollständigen Pfad angeben. Der folgende Befehl sucht beispielsweise nach der Datei im Heimatverzeichnis des Benutzers:
find /home -name testfile1.txt
3. Wie man nach Dateien eines bestimmten Typs sucht
Mit dem Befehl find können Sie auch nach gleichartigen Dateien in einem Verzeichnis (und seinen Unterverzeichnissen) suchen. Der folgende Befehl sucht beispielsweise nach allen.txt-Dateien in Ihrem aktuellen Arbeitsverzeichnis.
find . -name "*.txt"
Falls Sie es nicht wissen, * ist ein Platzhalterzeichen. Weitere Informationen zu Platzhalterzeichen finden Sie hier.
4. Wie man eine Groß-/Kleinschreibung unabhängige Suche durchführt
Standardmäßig führt der Befehl find eine groß- und kleinschreibungabhängige Suche durch (er behandelt Groß- und Kleinbuchstaben unterschiedlich). Aber wenn Sie möchten, können Sie den Befehl erzwingen, eine Groß-/Kleinschreibung unabhängige Suche durchzuführen. Dies kannst du mit der Kommandozeilenoption -iname tun.
find -iname [filename]
Zum Beispiel,
find -iname testfile1.txt
Hier ist die Ausgabe
5. Wie man nur Dateien anzeigt, die nicht mit dem Suchmuster übereinstimmen.
Wenn Sie möchten, können Sie sogar den Befehl find aufrufen, die Dateinamen auszudrucken, die nicht mit dem Suchmuster übereinstimmen (auch bekannt als invertierte Suche). Sie können auf diese Funktion mit dem Operator ! oder -not zugreifen.
Zum Beispiel
find . -not -name "*.txt"
Hier ist die Ausgabe
Wie Sie sehen können, werden also alle Dateien mit einer anderen Endung als .txt in der Ausgabe ausgegeben. Dies geht natürlich auch mit anderen Dateiendungen wie jpg Dateien.
6. Wie man die Suche auf die Verzeichnisebene(n) einschränkt
Standardmäßig sucht find rekursiv. Mit dem Befehl find können Sie die Suche auch auf eine bestimmte Verzeichnistiefe beschränken. Eine Befehlszeilenoption, mit der Sie dies tun können, ist -maxdepth.
Betrachten Sie beispielsweise die folgende Verzeichnisstruktur:
Nehmen wir an, wenn Sie nur bis zum Unterverzeichnis ‚find‘ suchen wollen (d.h. es sollte das Unterverzeichnis ‚howtoforge‘ ignorieren), dann können Sie den folgenden Befehl verwenden:
find . -maxdepth 3 -name "*.txt"
Hier zwingt ‚-maxdepth 3‘ ‚find‘ dazu, hineinzugehen und nur drei Ebenen zu durchsuchen, wobei die erste Ebene Ihr oberstes Ebene (oder das aktuell arbeitende) Verzeichnis ist.
Hier ist die Ausgabe des Befehls:
Wie bei der maximalen Tiefe gibt es eine weitere Option namens mindepth (Verwendung: ‚-mindepth[N]‘). Bei Verwendung dieser Option wird der Find-Befehl gezwungen, vor Beginn des Suchvorgangs auf die Ebene’N‘ nach unten zu gehen.
Zum Beispiel,
find . -mindepth 3 -name "*.txt"
Es werden also nur die Verzeichnisse ‚find‘ und unten durchsucht.
Wenn Sie in ähnlichen Zeilen eine.txt-Datei in Unterverzeichnissen suchen möchten, die zwischen Level 2 und 4 liegen, können Sie den folgenden Befehl verwenden.
find -mindepth 2 -maxdepth 4 -name "*.txt"
7. Alle leeren Dateien anzeigen
Wenn Sie möchten, können Sie mit dem Befehl find alle leeren Dateien in einem bestimmten Verzeichnis (und seinen Unterverzeichnissen) anzeigen. Dies kann mit der Option -empty geschehen.
Um beispielsweise alle leeren Dateien in Ihrem aktuellen Arbeitsverzeichnis anzuzeigen, verwenden Sie den folgenden Befehl:
$ find . -empty
8. So durchsuchen Sie Dateien, die zu einer bestimmten Gruppe gehören
Mit dem Befehl find können Sie auch nach Dateien suchen, die zu einer bestimmten Gruppe gehören – mit der Option -group können Sie dies tun. Der folgende Befehl listet beispielsweise alle Dateien – die sich im aktuellen Arbeitsverzeichnis und seinen Unterverzeichnissen befinden – auf, die zur Gruppe’howtoforge‘ gehören.
find . -group howtoforge -name "*.txt"
Hier ist die Ausgabe des obigen Befehls in meinem Fall:
9. So durchsuchen Sie Dateien, die einem bestimmten Benutzer gehören
Mit dem Befehl find können Sie auch nach Dateien suchen, die auf Eigentum basieren – mit der Option -user können Sie dies tun. Der folgende Befehl zeigt beispielsweise alle.txt-Dateien (im aktuellen Verzeichnis vorhanden) an, die dem Benutzer’himanshu‘ gehören:
find . -user himanshu -name "*.txt"
10. So suchen Sie nach zuletzt geänderten Dateien
Mit dem Befehl find können Sie nach zuletzt geänderten Dateien suchen. Dies kann mit der Option -mmin erfolgen. Die Option erfordert, dass Sie eine Zahl übergeben, die als Anzahl der Minuten behandelt wird.
Wenn Sie also z.B. nach.txt-Dateien (in Ihrem aktuellen Verzeichnis) suchen wollen, deren Daten vor 1 Minute geändert wurden, können Sie den folgenden Befehl verwenden:
find . -mmin 1 -name "*.txt"
11. So suchen Sie nach Dateien, die zuletzt geändert wurden, als eine Datei
Ja, mit dem Befehl find können Sie sogar nach Dateien suchen, die in letzter Zeit in einer bestimmten Datei geändert wurden. Auf diese Funktion kann mit der Option -newer zugegriffen werden, die die Übergabe eines Dateinamens (mit dem Sie vergleichen möchten) an sie erfordert.
Hier ist ein Beispiel:
find . -newer ./examples/find/howtoforge/old.txt -name "*.txt"
12. Wie man nur Verzeichnisnamen in der Ausgabe anzeigt
Es gibt auch eine Befehlszeilenoption, die es dem Befehl find ermöglicht, nur Verzeichnisnamen in der Ausgabe anzuzeigen. Es wird also nur nach Ordnern gesucht. Die fragliche Option ist -type und Sie müssen d als Wert an sie übergeben.
Zum Beispiel:
find -type d
Hier ist die Ausgabe des obigen Befehls in unserem Fall:
Neben d gibt es noch einige andere Buchstaben, die als Wert an die Option -type übergeben werden können. Um mehr über sie zu erfahren, gehen Sie zur Man Page des Find-Befehls, wie auch d name und f name.
13. So durchsuchen Sie Dateien anhand ihrer Inodennummern
Sie können auch eine Inode-Nummer an den Befehl find übergeben und ihn bitten, den entsprechenden Dateinamen (falls vorhanden) zu finden. Auf diese Funktion kann über die Option -inum zugegriffen werden, die eine Inodennummer als Wert erfordert.
Nachfolgend ein Beispiel:
Tipp: Sie können die Inode-Nummer einer Datei mit dem ls Befehl ‚ls -li‘ finden.
14. So durchsuchen Sie Dateien anhand der letzten Zugriffszeit
Mit dem Befehl find können Sie auch nach Dateien suchen, die darauf basieren, wann sie zuletzt aufgerufen wurden – Sie können das Tool bitten, Dateien anzuzeigen, auf die vor ’n‘ Minuten zuletzt zugegriffen wurde. Auf diese Funktion kann über die Befehlszeilenoption -amin zugegriffen werden.
Der folgende Befehl sucht beispielsweise nach.txt-Dateien im aktuellen Verzeichnis, auf die vor 1 Minute zugegriffen wurde:
find -amin 1 -name "*.txt"
15. Verwendung von regulären Ausdrücken (Regex) mit find
Der find befehl unterstützt auhc die Verwendung von regulären Ausdrücken. Diese können mit der Kommandozeilenoption -regex angegeben werden.
find ./ -type f -regex '\.\/test[1-2]\.txt'
Dieser regex findet alle Dateien die mit dem Wort Test beginnen, danach die Zahlen zwishen 1 und 2 beinhalten und dann mit .txt enden. Es ist wichtig im regulären Ausdruck zu berücksichtigen dass „./“ ein teil des Pafdes ist und nicht nur der Dateiname.
16. Dateien nach Größe mit find Befehl suchen
Mit der -size Kommandozeilen Option lassen sich Dateien anhand der Größe suchen. Wenn Sie z.B. Dateien die größer als 100 MB sind finden möchten, dann nutzen Sie folgenden Befehl:
find ./ -type f -size +100M
Sie können folgende Größeneinheiten verwenden:
- K = Kilobyte
- M = Megabyte
- G = Gigabyte
So können Sie also einfach in Linux große Dateien finden.
Fazit
Die in diesem Tutorial genannten Beispiele sollen Ihnen einen guten Überblick darüber geben, wie der find-Befehl auf einer grundlegenden Ebene funktioniert, sowie über einige der nützlichen Befehlszeilenoptionen, die er bietet. Probieren Sie diese Beispiele auf Ihrem System aus und gehen Sie auch die Man Page des Tools durch.