So finden Sie Dateien und Verzeichnisse in Linux

In Linux-Betriebssystemen kann der Befehl find zum Suchen von Dateien und Verzeichnissen auf Ihrem Computer verwendet werden. Um fortzufahren, wählen Sie einen Link aus der folgenden Liste aus oder gehen Sie nacheinander durch die einzelnen Abschnitte.

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

Grundfunktionen von find

Wenn Sie find ohne Optionen ausführen, wird eine Liste aller Dateien und Verzeichnisse im und unter dem Arbeitsverzeichnis angezeigt. Wenn Ihr Arbeitsverzeichnis beispielsweise / home / hope / Documents lautet, wird beim Ausführen von find Folgendes ausgegeben:

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

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

pwd

 / home / hoffnung / Dokumente 

Lassen Sie uns find ohne Optionen ausführen:

finden

 . ./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 Sie insgesamt zehn Dateien und vier Unterverzeichnisse in und unter unserem Ordner " Documents ".

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

finden .

Das obige Beispiel ist der "richtige" Weg, um find zu verwenden. Wenn Sie versuchen, es unter einem anderen UNIX-ähnlichen Betriebssystem wie FreeBSD zu verwenden, müssen Sie ein Verzeichnis angeben. Daher ist es ratsam, diese Befehlsform zu verwenden.

Angeben, wo gesucht werden soll

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

find / home / hope / Dokumente / Bilder

 / home / hope / Dokumente / images / home / hope / Dokumente / 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 die gleichen Dateien findet:

finden ./images

Diesmal spiegelt die Ausgabe jedoch den Startort der Suche wider und sieht folgendermaßen 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 Nummer verwenden.

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

finden . -maxdepth 1

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

Durch die Angabe von -maxdepth 2 wird das Verzeichnis und ein tiefes Unterverzeichnis durchsucht:

finden . -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 als die:

finden . -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 

Nach Name suchen

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:

finden . -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 mit einem Sternchen darstellen. Wenn Sie den Befehl ausführen, wird der Dateiname von der Shell in ein beliebiges Element verschoben, das mit dem Muster übereinstimmt:

finden . -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 mit der Erweiterung ( JPG ) nicht in Großbuchstaben auflistet. Das liegt daran, dass Linux-Dateinamen im Gegensatz zu anderen Betriebssystemen wie Microsoft Windows die Groß- und Kleinschreibung berücksichtigen.

Um stattdessen eine Groß- / Kleinschreibung zu verwenden, verwenden Sie die Option -iname :

finden . -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

Geben Sie -type f an, um nur Dateien aufzulisten und Verzeichnisnamen aus den Ergebnissen zu entfernen.

finden . -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 :

finden . -typ d

 . ./images ./images/hp ./images/memes ./hp-fanfic 

Dateien anhand der Größe suchen

Um nur Dateien einer bestimmten Größe anzuzeigen, können Sie die Option -size verwenden . Verwenden Sie zum Angeben der Größe 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 suchen, die "größer als 50 Kilobyte" sind, verwenden Sie -size + 50k :

finden . -größe + 50k

 ./images/memes/winteriscoming.jpg ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

Verwenden Sie für Dateien mit einer Größe von mehr als 10 Megabyte -size + 10M :

finden . -Größe + 10M

 ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

Für "größer als 1 Gigabyte" verwenden Sie -size + 1G :

finden . -größe + 1G

 ./archlinux-2016.02.01-dual.iso 

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

finden . -größe + 10M -größe -1G

 ./gimp-2.8.16.tar.bz2 

Suchen von Dateien anhand von Änderungen, Zugriffen oder Statusänderungen

Die Option -mtime schränkt die Suche ein, um wie viele Tage seit der Änderung der Datei der Inhalt geändert wurde. Verwenden Sie eine negative Zahl, um Tage in der Vergangenheit anzugeben. Wenn Sie beispielsweise nur die Dateien suchen möchten, die in den letzten zwei Tagen (vor 48 Stunden) geändert wurden, verwenden Sie -mtime -2 :

finden . -time -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:

finden . -mmin -30

Eine ähnliche Option ist -ctime, die prüft, wann der Status einer Datei zuletzt in Tagen gemessen wurde. Eine Statusänderung ist eine Änderung in den Metadaten der Datei. Das Ändern der Berechtigungen einer Datei ist beispielsweise 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, das heißt, wann der Inhalt zuletzt angezeigt wurde. Die Option -atime wird verwendet, um nach Dateien zu suchen, die auf ihrer letzten Zugriffszeit in Tagen basieren.

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

Ausgabe in eine Textdatei umleiten

Wenn Sie eine sehr umfangreiche Suche durchführen, möchten Sie möglicherweise Ihre Suchergebnisse 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:

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

Sie können Ihre Ergebnisse dann in einem Texteditor öffnen oder mit dem Befehl cat 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 Abschlagbefehl weiterleiten, der die Ausgabe auf den Bildschirm druckt und in eine Datei schreibt:

finden . -Größe + 500M | tee bigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

cat bigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

Fehlermeldungen unterdrücken

Sie erhalten möglicherweise die Fehlermeldung "Berechtigung verweigert", wenn Sie eine Suche durchführen. Wenn Sie beispielsweise das Stammverzeichnis als normaler Benutzer durchsuchen:

finden /

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

Diese Fehlermeldung wird angezeigt, wenn find versucht, auf eine Datei zuzugreifen, für die Ihr Benutzerkonto keine Leseberechtigung besitzt. Möglicherweise können Sie die Suche als Superuser ( root ) durchführen, der vollständigen Zugriff auf alle Dateien im System hat. Es wird jedoch nicht empfohlen, Dinge als root auszuführen, es sei denn, es gibt keine anderen Optionen.

Wenn Sie nur die Meldungen "Berechtigung verweigert" ausblenden möchten, können Sie 2 &> 1 | hinzufügen grep -v "Berechtigung verweigert" bis zum Ende Ihres Befehls wie folgt:

find / 2> & 1 | grep -v "Berechtigung verweigert"

Im obigen Beispiel werden die Meldungen "Permission denied" aus Ihrer Suche herausgefiltert. Wie?

2> & 1 ist eine spezielle Weiterleitung, die Fehlermeldungen an die Standardausgabe sendet, um die kombinierten Zeilen der Ausgabe an den Befehl grep weiterzuleiten. grep -v führt dann eine inverse Übereinstimmung für "Permission denied" 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 Methode, wenn "Permission denied" die Suchergebnisse stört und Sie die Suche nicht als Root ausführen können.

Beispiele

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

Finden Sie alle Dateien in Ihrem Home-Verzeichnis und unter deren Ende die Erweiterung " .txt ". Nur Dateien anzeigen, auf die in den letzten zwei Stunden zugegriffen wurde.

finden . -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 MB ist. Zeigt nur Dateien an, deren Inhalt in den letzten 72 Stunden geändert wurde.

finden . -iname "* report *" - Typ f -maxdepth 2

Suchen Sie nach Dateien, die das Wort " Bericht " im Namen enthalten. Wenn die Suche ein Verzeichnis mit dem Namen "report" findet, zeigen Sie es nicht an. Suche nur im Arbeitsverzeichnis und darunter eine Verzeichnisebene.

find / -name "* init *" 2> & 1 | grep -v "Berechtigung verweigert" | 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 einer Datei in Ihrem Home-Verzeichnis namens " initfiles.txt " aus.