Aktualisiert: 30.11.2020 von Computer Hope

Unter Linux-Betriebssystemen kann der Befehl find verwendet werden, um nach Dateien und Verzeichnissen auf Ihrem Computer zu suchen. Wählen Sie zum Fortfahren einen Link aus der folgenden Liste aus oder gehen Sie die einzelnen Abschnitte der Reihe nach durch.

Hinweis

Um find zu verwenden, öffnen Sie zunächst eine Terminalsitzung, um auf die Befehlszeile zuzugreifen.

Grundlegende Funktionalität von find

Wenn Sie find ohne Optionen ausführen, wird eine Liste aller Dateien und Verzeichnisse in und unter dem Arbeitsverzeichnis erstellt., Wenn Ihr Arbeitsverzeichnis beispielsweise /home/hope/Documents lautet, gibt das Ausführen von find Folgendes aus:

  • Jede Datei in /home/hope/Documents.
  • Jedes Unterverzeichnis in /home/Hoffnung/Dokumente.
  • Jede Datei in jedem dieser Unterverzeichnisse.

Sehen wir es in Aktion., Lassen Sie uns zunächst unser Arbeitsverzeichnis mit dem Befehl pwd überprüfen:

pwd
/home/hope/Documents

Führen Sie nun find ohne Optionen aus:

find

In diesem Beispiel sehen wir insgesamt zehn Dateien und vier Unterverzeichnisse in und unter unserem Dokumentenordner.

Beachten Sie, dass die Ausgabe mit einem einzelnen Punkt beginnt, der das Arbeitsverzeichnis darstellt., Das Ausführen von find ohne Optionen entspricht der Angabe, dass die Suche im Arbeitsverzeichnis wie folgt beginnen soll:

find .

Das obige Beispiel ist die „richtige“ Methode zur Verwendung von find. Wenn Sie versuchen, es auf einem anderen Unix-ähnlichen Betriebssystem wie FreeBSD zu verwenden, ist die Angabe eines Verzeichnisses erforderlich. Es ist eine gute Praxis, diese Form des Befehls zu verwenden.,

Geben Sie an, wo gesucht werden soll

Um nur Dateien und Unterverzeichnisse aufzulisten, die im Verzeichnis /home/hope/Documents/images enthalten sind, geben Sie das erste Argument des Befehls als an:

find /home/hope/Documents/images

Beachten Sie, dass der vollständige Pfad auch in den Ergebnissen angezeigt wird.,

Wenn unser Arbeitsverzeichnis /home/hope/Documents ist, können wir den folgenden Befehl verwenden, der die gleichen Dateien findet:

find ./images

Aber dieses Mal spiegelt die Ausgabe den Startort der Suche wider und sieht so aus:

Standardmäßig sucht die Suche in jedem Unterverzeichnis Ihres Startorts. Wenn Sie die Anzahl der zu suchenden Unterverzeichnisebenen einschränken möchten, können Sie die Option-maxdepth mit einer Nummer verwenden.

Wenn Sie beispielsweise-maxdepth 1 angeben, wird nur in dem Verzeichnis gesucht, in dem die Suche beginnt., Wenn Unterverzeichnisse gefunden werden, werden sie aufgelistet, aber nicht durchsucht.,

find . -maxdepth 1
../images./bigfiles.txt./gimp-2.8.16.tar.bz2./hp-fanfic./archlinux-2016.02.01-dual.iso

Specifying-maxdepth 2 durchsucht das Verzeichnis und ein Unterverzeichnis tief:

find . -maxdepth 2

Specifying-maxdepth 3 durchsucht eine Ebene tiefer als die:

find . -maxdepth 3

Finding by name

Um Ihre Suchergebnisse nur auf Dateien und Verzeichnisse mit einem bestimmten Namen zu beschränken, verwenden Sie die Option-name und setzen Sie den Namen in Anführungszeichen:

find . -name "picard.jpg"
./images/memes/picard.jpg

Sie können auch Platzhalter als Teil Ihres Dateinamens verwenden., Zum Beispiel, um alle Dateien zu finden, deren Name endet in .jpg, Sie können ein Sternchen verwenden, um den Rest des Dateinamens darzustellen. Wenn Sie den Befehl ausführen, gliedert die Shell den Dateinamen in alles, was mit dem Muster übereinstimmt:

find . -name "*.jpg"
./images/hp/snape.jpg./images/hp/harry.jpg./images/memes/winteriscoming.jpg./images/memes/picard.jpg

Beachten Sie, dass unser Befehl die Datei, deren Erweiterung (in diesem Fall JPG) in Großbuchstaben angegeben ist, nicht aufgelistet hat. Das liegt daran, dass Linux-Dateinamen im Gegensatz zu anderen Betriebssystemen wie Microsoft Windows Groß-und Kleinschreibung berücksichtigen.,“>

Um nur Verzeichnisse aufzulisten und Dateinamen wegzulassen, geben Sie-type d:

find . -type d

Dateien basierend auf der Größe

Um beispielsweise Dateien zu finden, die „größer als 50 Kilobyte“ sind, verwenden Sie-size +50k:

find . -size +50k
./images/memes/winteriscoming.jpg./gimp-2.8.16.tar.bz2./archlinux-2016.02.01-dual.iso

Für Dateien „größer als 10 Megabyte“, use-size +10M:

find . -size +10M
./gimp-2.8.16.tar.bz2./archlinux-2016.02.01-dual.iso

Für „größer als 1 Gigabyte“, use-size +1G:

find . -size +1G
./archlinux-2016.02.01-dual.iso

Verwenden Sie für Dateien in einem bestimmten Größenbereich zwei Größenoptionen., Um beispielsweise Dateien „größer als 10 Megabyte, aber kleiner als 1 Gigabyte“ zu finden, geben Sie-size +10M-size-1G:

find . -size +10M -size -1G
./gimp-2.8.16.tar.bz2

Dateien basierend auf Änderungen, Zugriffen oder Statusänderungen finden

Die Option-mtime beschränkt die Suche nach wie vielen Tagen, seit der Änderung des Dateiinhalts. Verwenden Sie eine negative Zahl, um Tage in der Vergangenheit anzugeben., Um beispielsweise nur die Dateien zu finden, die in den letzten zwei Tagen (vor 48 Stunden) geändert wurden, verwenden Sie-mtime -2:

find . -mtime -2

Die Option-mmin macht dasselbe, jedoch in Minuten, nicht in Tagen. Dieser Befehl zeigt beispielsweise nur Dateien an,die in der letzten halben Stunde geändert wurden:

find . -mmin -30

Eine ähnliche Option ist-ctime, die überprüft, wann der Status einer Datei zuletzt geändert wurde, gemessen in Tagen. Eine Statusänderung ist eine Änderung der Metadaten der Datei. Das Ändern der Berechtigungen einer Datei ist beispielsweise eine Statusänderung.,

Die Option-cmin sucht nach einer in Minuten gemessenen Statusänderung.

Sie können auch danach suchen, wann zuletzt auf eine Datei zugegriffen wurde — also wann deren Inhalt zuletzt angezeigt wurde. Die Option-atime wird verwendet, um nach Dateien zu suchen, die auf ihrer letzten Zugriffszeit basieren, gemessen in Tagen.

Die Option-amin führt dieselbe Sucheinschränkung aus, wird jedoch in Minuten gemessen.

Ausgabe in eine Textdatei umleiten

Wenn Sie eine sehr große Suche durchführen, möchten Sie Ihre Suchergebnisse möglicherweise in einer Datei speichern, damit Sie die Ergebnisse später anzeigen können., Sie können dies tun, indem Sie Ihre Suchausgabe in eine Datei umleiten:

find . -iname "*.jpg" > images.txt

Sie können Ihre Ergebnisse dann in einem Texteditor öffnen oder mit dem Befehl cat ausdrucken.

cat images.txt

Alternativ können Sie Ihre Ausgabe an den tee-Befehl weiterleiten, der die Ausgabe auf den Bildschirm druckt und in eine Datei schreibt:

find . -size +500M | tee bigfiles.txt
./archlinux-2016.02.01-dual.iso
cat bigfiles.txt
./archlinux-2016.02.01-dual.iso

Unterdrücken fehlermeldungen

Möglicherweise erhalten Sie bei der Suche die Fehlermeldung „Berechtigung verweigert“., Wenn Sie beispielsweise als normaler Benutzer im Stammverzeichnis suchen:

find /

, erhalten Sie diese Fehlermeldung, wenn find versucht, auf eine Datei zuzugreifen Ihr Benutzerkonto hat keine Berechtigung zum Lesen. Sie können die Suche als Superuser (root) durchführen, der vollständigen Zugriff auf jede Datei auf dem System hat. Es wird jedoch nicht empfohlen, Dinge als root zu tun, es sei denn, es gibt keine anderen Optionen.,

Wenn Sie nur die Nachrichten „Permission denied“ ausblenden müssen, können Sie 2&>1 | grep-v „Permission denied“ am Ende Ihres Befehls wie folgt hinzufügen:

find / 2>&1 | grep -v "Permission denied"

Das obige Beispiel filtert die Nachrichten „Permission denied“ aus Ihrer Suche heraus. Wie?

2>&1 ist eine spezielle Umleitung, die Fehlermeldungen an die Standardausgabe sendet, um die kombinierten Ausgabezeilen an den grep-Befehl weiterzuleiten., grep-v führt dann eine inverse Übereinstimmung mit „Permission denied“ aus und zeigt nur Zeilen an, die diese Zeichenfolge nicht enthalten.

Das Umleiten und Verwenden von grep zum Filtern der Fehlermeldungen ist eine nützliche Technik, wenn „Berechtigung verweigert“ Ihre Suchergebnisse überfüllt und Sie die Suche nicht als root durchführen können.

Beispiele

find ~/. -name "*.txt" -amin -120

Finden Sie alle Dateien in Ihrem Home-Verzeichnis und darunter, die in der Erweiterung enden“.txt“. Zeigt nur Dateien an, auf die in den letzten zwei Stunden zugegriffen wurde.,

find . -name "*.zip" -size +10M -mtime -3

Finden Sie alle Dateien im Arbeitsverzeichnis und darunter, deren Name die Erweiterung hat“.zip“ und deren Größe größer als 10 Megabyte. Zeigt nur Dateien an, deren Inhalt in den letzten 72 Stunden geändert wurde.

find . -iname "*report*" -type f -maxdepth 2

Führen Sie eine Groß-und Kleinschreibung Suche nach Dateien, die das Wort“ Bericht “ in ihrem Namen enthalten. Wenn die Suche ein Verzeichnis mit „Bericht“ im Namen findet, zeigen Sie es nicht an. Suchen Sie nur im Arbeitsverzeichnis und eine Verzeichnisebene darunter.,

find / -name "*init*" 2>&1 | grep -v "Permission denied" | tee ~/initfiles.txt

Suchen Sie alle Dateien auf dem System, deren Name“ init “ enthält, und unterdrücken Sie Fehlermeldungen. Zeigen Sie die Ergebnisse auf dem Bildschirm an und geben Sie sie in eine Datei in Ihrem Home-Verzeichnis mit dem Namen „initfiles.txt“.