So finden Sie Dateien und Verzeichnisse in Linux

Befehl finden

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

Notiz

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 im und unterhalb des Arbeitsverzeichnisses erstellt. Wenn Ihr Arbeitsverzeichnis beispielsweise /home/hope/Documents ist, gibt das Ausführen von find Folgendes aus:

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

Sehen wir es uns in Aktion an. Lassen Sie uns zuerst unser Arbeitsverzeichnis mit dem Befehl pwd überprüfen:

pwd
/home/hope/Documents

Lassen Sie uns jetzt find ohne Optionen ausführen:

find
.
./images
./images/hp
./images/hp/snape.jpg
./images/hp/harry.jpg
./images/memes
./images/memes/winteriscoming.jpg
./images/memes/goodguygary.JPG
./images/memes/picard.jpg
./gimp-2.8.16.tar.bz2
./hp-fanfic
./hp-fanfic/malfoys-revenge.doc
./hp-fanfic/weekend-at-hagreds.doc
./hp-fanfic/dumbledores-lament.doc
./archlinux-2016.02.01-dual.iso

In diesem Beispiel sehen wir insgesamt zehn Dateien und vier Unterverzeichnisse in und unter unserem Ordner „Dokumente“.

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 beginnen soll, wie folgt:

find .

Das obige Beispiel ist die “richtige” Art, find zu verwenden. Wenn Sie versuchen, es auf einem anderen Unix-ähnlichen Betriebssystem wie FreeBSD zu verwenden, müssen Sie ein Verzeichnis angeben. Es empfiehlt sich, diese Form des Befehls zu verwenden.

Angabe, 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 wie folgt an:

find /home/hope/Documents/images
/home/hope/Documents/images
/home/hope/Documents/images/hp
/home/hope/Documents/images/hp/snape.jpg
/home/hope/Documents/images/hp/harry.jpg
/home/hope/Documents/images/memes
/home/hope/Documents/images/memes/winteriscoming.jpg
/home/hope/Documents/images/memes/goodguygary.JPG
/home/hope/Documents/images/memes/picard.jpg

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 dieselben Dateien findet:

find ./images

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

./images
./images/hp
./images/hp/snape.jpg
./images/hp/harry.jpg
./images/memes
./images/memes/winteriscoming.jpg
./images/memes/goodguygary.JPG
./images/memes/picard.jpg

Standardmäßig sucht die Suche in jedem Unterverzeichnis Ihres Startorts. Wenn Sie die Anzahl der zu durchsuchenden Unterverzeichnisebenen einschränken möchten, können Sie die Option -maxdepth mit einer Zahl 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

Die Angabe von -maxdepth 2 durchsucht das Verzeichnis und ein Unterverzeichnis tief:

find . -maxdepth 2
.
./images
./images/hp
./images/memes
./gimp-2.8.16.tar.bz2
./hp-fanfic
./hp-fanfic/malfoys-revenge.doc
./hp-fanfic/weekend-at-hagreds.doc
./hp-fanfic/dumbledores-lament.doc
./archlinux-2016.02.01-dual.iso

Durch Angabe von -maxdepth 3 wird eine Ebene tiefer gesucht:

find . -maxdepth 3
.
./images
./images/hp
./images/hp/snape.jpg
./images/hp/harry.jpg
./images/memes
./images/memes/winteriscoming.jpg
./images/memes/goodguygary.JPG
./images/memes/picard.jpg
./gimp-2.8.16.tar.bz2
./hp-fanfic
./hp-fanfic/malfoys-revenge.doc
./hp-fanfic/weekend-at-hagreds.doc
./hp-fanfic/dumbledores-lament.doc
./archlinux-2016.02.01-dual.iso

Suche nach Namen

Um Ihre Suchergebnisse so einzuschränken, dass nur Dateien und Verzeichnisse mit einem bestimmten Namen gefunden werden, 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. Um beispielsweise alle Dateien zu finden, deren Name auf .jpg endet, können Sie den Rest des Dateinamens durch ein Sternchen darstellen. Wenn Sie den Befehl ausführen, fügt die Shell den Dateinamen in alles ein, was dem Muster entspricht:

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 nicht aufgelistet hat, deren Erweiterung (in diesem Fall JPG) in Großbuchstaben steht. Das liegt daran, dass Linux-Dateinamen im Gegensatz zu anderen Betriebssystemen wie Microsoft Windows zwischen Groß- und Kleinschreibung unterscheiden.

Um stattdessen eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen, verwenden Sie die Option -iname:

find . -iname "*.jpg"
./images/hp/snape.jpg
./images/hp/harry.jpg
./images/memes/winteriscoming.jpg
./images/memes/goodguygary.JPG
./images/memes/picard.jpg

Nur Dateien oder nur Verzeichnisse finden

Um nur Dateien aufzulisten und Verzeichnisnamen aus Ihren Ergebnissen wegzulassen, geben Sie -type f an:

find . -type f
./images/hp/snape.jpg
./images/hp/harry.jpg
./images/memes/winteriscoming.jpg
./images/memes/goodguygary.JPG
./images/memes/picard.jpg
./gimp-2.8.16.tar.bz2
./hp-fanfic/malfoys-revenge.doc
./hp-fanfic/weekend-at-hagreds.doc
./hp-fanfic/dumbledores-lament.doc
./archlinux-2016.02.01-dual.iso

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

find . -type d
.
./images
./images/hp
./images/memes
./hp-fanfic

Suchen von Dateien basierend auf der Größe

Um nur Dateien einer bestimmten Größe anzuzeigen, können Sie die Option -size verwenden. Um die Größe anzugeben, verwenden Sie ein Plus- oder Minuszeichen (für „mehr als“ oder „kleiner als“), eine Zahl und ein quantitatives Suffix wie k, M oder G.

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

Verwenden Sie für Dateien “größer als 10 Megabyte” -size +10M:

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

Verwenden Sie für “größer als 1 Gigabyte” -size +1G:

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

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

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

Suchen von Dateien basierend auf Modifikation, Zugriff oder Statusänderung

Die Option -mtime beschränkt die Suche darauf, wie viele Tage seit der Änderung des Dateiinhalts verstrichen sind. Um Tage in der Vergangenheit anzugeben, verwenden Sie eine negative Zahl. 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, aber 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 prüft, wann der Status einer Datei zuletzt geändert wurde, gemessen in Tagen. Eine Statusänderung ist eine Änderung der Metadaten der Datei. Beispielsweise ist das Ändern der Berechtigungen einer Datei eine Statusänderung.

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

Sie können auch danach suchen, wann auf eine Datei zuletzt zugegriffen wurde – mit anderen Worten, wann ihr Inhalt zuletzt angesehen wurde. Die Option -atime wird verwendet, um nach Dateien basierend auf ihrer letzten Zugriffszeit, gemessen in Tagen, zu suchen.

Die Option -amin führt die gleiche Suchbeschränkung durch, jedoch in Minuten gemessen.

Ausgabe in eine Textdatei umleiten

Wenn Sie eine sehr umfangreiche 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

Anschließend können Sie Ihre Ergebnisse in einem Texteditor öffnen oder mit dem cat-Befehl ausdrucken.

cat images.txt
./images/hp/snape.jpg
./images/hp/harry.jpg
./images/memes/winteriscoming.jpg
./images/memes/goodguygary.JPG
./images/memes/picard.jpg

Alternativ können Sie Ihre Ausgabe an den Befehl tee weiterleiten, der die Ausgabe auf dem Bildschirm ausgibt 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

Fehlermeldungen unterdrücken

Möglicherweise erhalten Sie beim Durchführen einer Suche die Fehlermeldung „Berechtigung verweigert“. Wenn Sie beispielsweise als normaler Benutzer das Stammverzeichnis durchsuchen:

find /
find: `/var/lib/sudo/ts': Permission denied
find: `/var/lib/sudo/lectured': Permission denied
find: `/var/lib/polkit-1': Permission denied
find: `/var/lib/container': Permission denied
find: `/var/lib/gdm3/.dbus': Permission denied
find: `/var/lib/gdm3/.config/ibus': Permission denied
...

Sie erhalten diese Fehlermeldung, wenn find versucht, auf eine Datei zuzugreifen, für die Ihr Benutzerkonto keine Leseberechtigung hat. Sie können die Suche als Superuser (root) durchführen, der vollen Zugriff auf alle Dateien im System hat. Es wird jedoch nicht empfohlen, Dinge als root zu tun, es sei denn, es gibt keine anderen Optionen.

Wenn Sie lediglich die Meldungen „Zugriff verweigert“ ausblenden müssen, können Sie 2&>1 | hinzufügen grep -v “Permission denied” an das Ende Ihres Befehls, etwa so:

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

Das obige Beispiel filtert die Meldungen „Berechtigung verweigert“ 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 einen inversen Abgleich auf “Zugriff verweigert” durch 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 “Erlaubnis verweigert” Ihre Suchergebnisse unübersichtlich macht 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 auf die Endung „.txt“ enden. Nur Dateien anzeigen, auf die in den letzten zwei Stunden zugegriffen wurde.

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

Suchen Sie alle Dateien im Arbeitsverzeichnis und darunter, deren Name die Erweiterung “.zip” hat und deren Größe größer als 10 Megabyte ist. Nur Dateien anzeigen, deren Inhalt in den letzten 72 Stunden geändert wurde.

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

Führen Sie eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung nach Dateien durch, 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

Finden 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 namens “initfiles.txt” in Ihrem Home-Verzeichnis aus.

Neueste Artikel
Vielleicht möchten Sie lesen

LEAVE A REPLY

Please enter your comment!
Please enter your name here