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.