Was ist der Linux find-Befehl?
Der find-Befehl ist ein leistungsstarkes Tool in Linux, mit dem du Dateien und Verzeichnisse in deinem Dateisystem rekursiv suchen kannst. Er durchsucht sowohl versteckte als auch sichtbare Dateien und bietet dir eine Vielzahl von Suchkriterien, mit denen du genau die benötigten Elemente finden kannst.
Was kann der find-Befehl?
- Suchen nach Dateinamen: Du kannst nach Dateien mit bestimmten Dateinamen oder Namensmustern suchen.
- Suche nach Dateityp: Du kannst nach Dateien eines bestimmten Typs suchen, wie z. B. reguläre Dateien, Verzeichnisse, Blockgeräte oder symbolische Links.
- Suche nach Dateiberechtigungen: Du kannst nach Dateien mit bestimmten Berechtigungen suchen, z. B. lesbare oder ausführbare Dateien.
- Suche nach Datum und Uhrzeit: Du kannst nach Dateien suchen, die zu einem bestimmten Zeitpunkt erstellt, geändert oder aufgerufen wurden.
- Suche nach Dateigröße: Du kannst nach Dateien einer bestimmten Größe oder eines bestimmten Größenbereichs suchen.
- Suche nach Dateien in bestimmten Verzeichnissen: Du kannst den Suchbereich auf bestimmte Verzeichnisse oder Dateisystemeingrenzen.
- Suche nach leeren Dateien: Du kannst nach leeren Dateien suchen, z. B. um ungenutzten Speicherplatz zu identifizieren.
- Suche nach gelöschten Dateien: Mit den richtigen Berechtigungen kannst du nach gelöschten Dateien suchen, die sich noch im Papierkorb befinden.
Syntax des find-Befehls
Die Syntax des find
-Befehls lautet:
find [Pfad] [Ausdruck] [Aktion]
Wobei die folgenden Argumente verwendet werden:
Pfad
Der Pfad gibt das Verzeichnis oder die Verzeichnisse an, in denen du suchen möchtest. Wenn kein Pfad angegeben ist, wird das aktuelle Arbeitsverzeichnis verwendet.
Ausdruck
Der Ausdruck gibt die Kriterien an, anhand derer du suchen möchtest. Dieser Abschnitt kann eine Kombination aus Suchoptionen und Dateinamenmustern enthalten.
Aktion
Die Aktion gibt an, was mit den gefundenen Dateien oder Verzeichnissen geschehen soll. Dies kann das Drucken des Namens, das Kopieren der Datei oder das Ausführen eines Befehls sein.
Beispielsweise sucht der folgende Befehl nach allen Dateien mit der Erweiterung .txt
im Verzeichnis /home/benutzer
:
find /home/benutzer -name "*.txt"
Der folgende Befehl sucht nach allen Verzeichnissen namens Dokumente
im aktuellen Verzeichnis und druckt ihre vollständigen Pfade:
find -name "Dokumente" -type d -print
Der folgende Befehl sucht nach allen Dateien im Verzeichnis /var/log
, die älter als 30 Tage sind, und löscht sie:
find /var/log -mtime +30 -delete
Suchoptionen
Der find
-Befehl bietet eine Vielzahl von Suchoptionen, mit denen du deine Suche nach Dateien und Verzeichnissen präzisieren kannst. Hier sind einige der wichtigsten Optionen:
Name
Mit der Option -name
kannst du nach Dateien oder Verzeichnissen mit einem bestimmten Namen suchen. Du kannst auch Jokerzeichen wie *
und ?
verwenden, um Zeichen in dem Namen zu ersetzen.
Typ
Die Option -type
ermöglicht es dir, nach Dateien oder Verzeichnissen eines bestimmten Typs zu suchen. Die gängigsten Dateitypen sind:
-
f
für reguläre Dateien -
d
für Verzeichnisse -
l
für symbolische Links -
s
für Sockets
Größe
Mit der Option -size
kannst du nach Dateien oder Verzeichnissen einer bestimmten Größe suchen. Du kannst eine Größe in Bytes, Kilobytes, Megabytes, Gigabytes oder Terabytes angeben. Beispielsweise würde -size +10M
nach Dateien suchen, die größer als 10 Megabyte sind.
Zeitpunkt
Die Optionen -atime
, -mtime
und -ctime
ermöglichen es dir, nach Dateien oder Verzeichnissen zu suchen, die zuletzt aufgerufen, geändert oder erstellt wurden. Du kannst ein Datum im Format JJJJ-MM-TT
oder eine relative Zeitangabe wie -5 days
(die letzten 5 Tage) angeben.
Berechtigungen
Mit der Option -perm
kannst du nach Dateien oder Verzeichnissen mit bestimmten Berechtigungen suchen. Du kannst eine Oktalzahl verwenden, um die Berechtigungen anzugeben, oder du kannst symbolische Namen wie u+r
(Lesezugriff für den Benutzer) oder g-w
(Schreibzugriff für die Gruppe) verwenden.
Optionen für die erweiterte Suche
Zusätzlich zu diesen grundlegenden Suchoptionen bietet find
auch eine Reihe von erweiterten Suchoptionen, darunter:
-
-exec
: Führt einen Befehl für jede gefundene Datei oder jedes gefundene Verzeichnis aus -
-prune
: Beendet die Suche in dem aktuellen Verzeichnis oder Unterverzeichnis -
-xdev
: Überschreitet keine Dateisystemgrenzen hinweg
Dateinamenmuster
Dateinamenmuster ermöglichen es dir, Dateien nach bestimmten Namensmustern zu suchen. Sie sind eine leistungsstarke Möglichkeit, deine Suche einzugrenzen und genau die Dateien zu finden, nach denen du suchst.
Grundlegende Muster
- ? – Übereinstimmung mit einem beliebigen einzelnen Zeichen
- * – Übereinstimmung mit einer beliebigen Anzahl von Zeichen
-
[] – Übereinstimmung mit einem beliebigen Zeichen in der Menge. Bsp.:
[abc]
entsprichta
,b
oderc
. -
[^] – Übereinstimmung mit einem beliebigen Zeichen außerhalb der Menge. Bsp.:
[^abc]
entspricht jedem Zeichen außera
,b
oderc
.
Sonderzeichen
Neben den grundlegenden Mustern stehen dir auch Sonderzeichen zur Verfügung, die dir noch mehr Flexibilität bieten:
-
. (Punkt) – Übereinstimmung mit einem beliebigen versteckten Zeichen (z. B.
.*
entspricht allen Dateien mit einem beliebigen Namen, die mit einem Punkt enden) - ^ (Caret) – Übereinstimmung mit dem Anfang einer Zeichenfolge
- $ (Dollarzeichen) – Übereinstimmung mit dem Ende einer Zeichenfolge
Beispielhafte Verwendung
Angenommen, du möchtest alle Dateien im aktuellen Verzeichnis finden, die mit myfile
beginnen und mit .txt
enden, würdest du das folgende Muster verwenden:
find . -name "myfile*.txt"
Wenn du nach allen Dateien mit einem beliebigen Namen suchst, die ein _
und eine 3
enthalten, würdest du Folgendes verwenden:
find . -name "*_3*"
Allgemeine Suchoptionen
Der Linux find
-Befehl bietet eine Vielzahl allgemeiner Suchoptionen, mit denen du deine Suche weiter eingrenzen und spezifizieren kannst. Diese Optionen helfen dir, Dateien und Verzeichnisse präziser zu finden und die Ergebnisse zu filtern, sodass du genau die Informationen bekommst, die du benötigst.
Filteroptionen
-
-name: Suche nach Dateien oder Verzeichnissen mit einem bestimmten Namen.
-
-iname: Suche nach Dateien oder Verzeichnissen, deren Name dem angegebenen Muster ähnelt (ohne Berücksichtigung der Groß-/Kleinschreibung).
-
-regex: Suche nach Dateien oder Verzeichnissen, deren Name mit einem regulären Ausdruck übereinstimmt.
-
-mtime: Suche nach Dateien oder Verzeichnissen, deren letzte Änderungszeit vor oder nach einer bestimmten Anzahl von Tagen, Wochen, Monaten oder Jahren liegt.
-
-ctime: Suche nach Dateien oder Verzeichnissen, deren letzte Statusänderung (z. B. Zugriff oder Erstellung) vor oder nach einer bestimmten Zeit liegt.
-
-atime: Suche nach Dateien oder Verzeichnissen, auf die zuletzt vor oder nach einer bestimmten Zeit zugegriffen wurde.
Optionen zur Ergebnisfilterung
-
-print: Gebe den Pfad der gefundenen Dateien oder Verzeichnisse aus.
-
-print0: Gebe den Pfad der gefundenen Dateien oder Verzeichnisse mit einem nullterminierten Zeichen aus, wodurch sie einfach weiterverarbeitet werden können.
-
-ls: Gebe detaillierte Informationen zu den gefundenen Dateien oder Verzeichnissen aus, einschließlich Dateigröße, Datum und Uhrzeit der letzten Änderung und Berechtigungen.
-
-ls-l: Gebe detaillierte Informationen zu den gefundenen Dateien oder Verzeichnissen aus, einschließlich Eigentümer, Gruppe und anderer Berechtigungen.
-
-count: Gib die Anzahl der gefundenen Dateien oder Verzeichnisse aus.
Weitere Optionen
-
-exec: Führe einen Befehl für jede gefundene Datei oder jedes Verzeichnis aus. Dies ist nützlich, um weitere Operationen mit den Suchergebnissen durchzuführen, wie z. B. Kopieren, Löschen oder Archivieren.
-
-ok: Führe einen Befehl für jede gefundene Datei oder jedes Verzeichnis aus und fordere vor der Ausführung eine Bestätigung an.
-
-newer: Suche nach Dateien oder Verzeichnissen, die neuer sind als eine angegebene Datei oder ein angegebenes Verzeichnis.
Erweitertes Suchen mit xargs
Der xargs
-Befehl ermöglicht es dir, die Ausgabe eines Befehls als Eingabe für einen anderen Befehl zu verwenden. Dies kann sehr nützlich sein, wenn du ein Ergebnis weiter verarbeiten möchtest, das der find
-Befehl ausgegeben hat.
Pipen mit xargs
Du kannst den find
-Befehl mit einem Pipe-Operator (|
) an xargs
weiterleiten, um die Ausgabe von find
als Eingabe für xargs
zu verwenden. Dies ist besonders nützlich, wenn der nachfolgende Befehl eine begrenzte Anzahl von Argumenten akzeptiert.
find /home/user -name "*.txt" | xargs grep "Suchbegriff"
Verarbeitung der Dateiliste
xargs
bietet verschiedene Optionen zur Verarbeitung der Dateiliste. Du kannst beispielsweise die Anzahl der Eingabedateien angeben, die pro Befehl verarbeitet werden sollen:
find /home/user -name "*.txt" | xargs -n 5 grep "Suchbegriff"
In diesem Beispiel werden jeweils 5 Dateien an den grep
-Befehl übergeben.
Anpassung der Befehlszeile
Du kannst auch die Befehlszeile anpassen, die xargs
ausführt. Dies ist nützlich, wenn du zusätzliche Optionen oder Argumente an den nachfolgenden Befehl übergeben möchtest:
find /home/user -name "*.txt" | xargs -I{} echo "Verarbeite Datei: {}"
Im obigen Beispiel wird die Dateiliste durch {}
dargestellt, und das Skript echo
wird für jede Datei ausgeführt und gibt den Dateinamen aus.
Vorteile der Verwendung von xargs
Die Verwendung von xargs
mit dem find
-Befehl bietet mehrere Vorteile:
- Effizienz: Es ermöglicht die Verarbeitung großer Dateilisten in kleinen Blöcken.
-
Anpassbarkeit: Du kannst die Befehlszeile steuern, die
xargs
ausführt. - Erweiterte Möglichkeiten: Es kann mit anderen Befehlen kombiniert werden, um komplexe Suchvorgänge durchzuführen.
Durch das Verständnis der erweiterten Suchmöglichkeiten mit xargs
kannst du den find
-Befehl effektiver nutzen, um Dateien und Verzeichnisse auf deinem Linux-System zu finden und zu verarbeiten.
Tipps zur Fehlersuche
Wenn du den find-Befehl verwendest, kannst du auf verschiedene Fehler stoßen. Hier sind einige Tipps zur Fehlerbehebung:
Überprüfe die Berechtigungen
Stelle sicher, dass du die Berechtigungen hast, um die Dateien und Verzeichnisse zu suchen, die du angibst. Wenn du keine Berechtigungen hast, wird der find-Befehl den Fehler "Permission denied" ausgeben.
Überprüfe die Syntax
Überprüfe, ob du die richtige Syntax für den find-Befehl verwendest. Die allgemeine Syntax lautet:
find [Optionen] Pfad [Ausdruck]
Wenn die Syntax ungültig ist, wird der find-Befehl einen Fehler ausgeben.
Überprüfe die Suchoptionen
Stelle sicher, dass du die richtigen Suchoptionen verwendest. Wenn du die falsche Option verwendest, werden dir möglicherweise nicht die gewünschten Ergebnisse angezeigt. Die Dokumentation zum find-Befehl enthält eine vollständige Liste der verfügbaren Optionen.
Überprüfe die Dateinamenmuster
Wenn du Dateinamenmuster verwendest, stelle sicher, dass sie korrekt sind. Wenn die Muster ungültig sind, werden dir möglicherweise nicht die gewünschten Ergebnisse angezeigt. Weitere Informationen zu Dateinamenmustern findest du in der Dokumentation zum find-Befehl.
Überprüfe die Ergebnisse
Es kann hilfreich sein, die Ergebnisse des find-Befehls zu überprüfen, um sicherzustellen, dass sie deinen Erwartungen entsprechen. Du kannst die Ergebnisse mit Befehlen wie ls
oder grep
filtern und anzeigen.
Weitere Fehlerbehebungsressourcen
Wenn du immer noch Probleme bei der Verwendung des find-Befehls hast, kannst du die folgenden Ressourcen zur Fehlerbehebung konsultieren:
Beispielhafte Verwendungsszenarien
Der Linux find-Befehl bietet unzählige Möglichkeiten, Dateien und Verzeichnisse zu suchen. Hier sind einige gängige und praktische Verwendungsszenarien, die deine Sucheffizienz steigern können:
Dateien nach Name suchen
Problem: Du musst eine bestimmte Datei mit einem bestimmten Namen oder Teilnamen finden.
Lösung: Verwende die Option -name
.
find / -name "wichtige_datei.txt"
Dateien nach Typ suchen
Problem: Du benötigst eine Liste aller Dateien eines bestimmten Typs, z. B. reguläre Dateien, Verzeichnisse oder Symlinks.
Lösung: Verwende die Option -type
.
find / -type f -print
Dateien nach Größe suchen
Problem: Du möchtest große oder kleine Dateien identifizieren, die Speicherplatz belegen.
Lösung: Verwende die Optionen -size
und -cmin
.
find / -size +50M -print
find / -cmin -30 -size +1G -print
Dateien nach Datum suchen
Problem: Du musst Dateien suchen, die innerhalb eines bestimmten Zeitraums geändert oder erstellt wurden.
Lösung: Verwende die Optionen -atime
(Zugriffszeit), -mtime
(Änderungszeit) und -ctime
(Erstellungszeit).
find / -atime +10 -print
find / -mtime -1 -print
Dateien nach Eigentümer oder Gruppe suchen
Problem: Du benötigst eine Liste von Dateien, die einem bestimmten Benutzer oder einer bestimmten Gruppe gehören.
Lösung: Verwende die Optionen -user
und -group
.
find / -user username -print
find / -group groupname -print
Dateien nach Inhalt suchen
Problem: Du möchtest Text oder Muster innerhalb von Dateien suchen.
Lösung: Verwende das Tool xargs
, um grep
mit dem find-Befehl zu kombinieren.
find / -name "*.txt" -print0 | xargs -0 grep "Suchbegriff"
Drehen Sie die Suchergebnisse um
Manchmal kann es hilfreich sein, die Suchergebnisse umzukehren, um eine Liste von Dateien oder Verzeichnissen zu erhalten, die den angegebenen Kriterien nicht entsprechen. Dies kann z. B. nützlich sein, wenn Sie alle Dateien finden möchten, die nicht mit einem bestimmten Muster übereinstimmen, oder wenn Sie alle Verzeichnisse auflisten möchten, die nicht leer sind.
Um die Suchergebnisse umzukehren, kannst du die Option -not
(!
in älteren Versionen von find
) verwenden. Diese Option negiert den nachfolgenden Ausdruck. Beispielsweise listet der folgende Befehl alle Dateien im aktuellen Verzeichnis auf, deren Name nicht mit \.txt
endet:
find . -type f -not -name "*.txt"
Suche nach Dateien, die nicht einem Muster entsprechen
Wenn du nach Dateien suchen möchtest, die nicht einem bestimmten Muster entsprechen, kannst du die Option -not
in Kombination mit der Option -name
verwenden. Beispielsweise listet der folgende Befehl alle Dateien im aktuellen Verzeichnis auf, deren Name nicht mit \.jpg
endet:
find . -type f -not -name "*.jpg"
Suche nach Verzeichnissen, die nicht leer sind
Wenn du nach Verzeichnissen suchen möchtest, die nicht leer sind, kannst du die Option -not
in Kombination mit der Option -empty
verwenden. Beispielsweise listet der folgende Befehl alle Verzeichnisse im aktuellen Verzeichnis auf, die nicht leer sind:
find . -type d -not -empty
Leere Dateien suchen
Benötigst du eine Möglichkeit, leere Dateien auf deinem Linux-System zu identifizieren? Der Linux find-Befehl kann dir dabei helfen.
Vorgehensweise
Um leere Dateien zu suchen, verwende folgende Syntax:
find [Suchpfad] -empty
Der Suchpfad gibt das Verzeichnis an, in dem du suchen möchtest.
Beispiel
Angenommen, du möchtest alle leeren Dateien im Verzeichnis "/home/alice" suchen, dann würdest du folgenden Befehl ausführen:
find /home/alice -empty
Optionen
Der find-Befehl bietet weitere Optionen zum Anpassen deiner Suche nach leeren Dateien:
- -print0: Trennt die Ergebnisse durch ein Nullzeichen (ASCII-Code 0) statt durch einen Zeilenumbruch. Dies ist nützlich, wenn du die Ergebnisse an andere Befehle weiterleiten möchtest.
-
-exec Befehl;: Führt den angegebenen Befehl für jede gefundene leere Datei aus. Du kannst beispielsweise den Befehl
rm
verwenden, um leere Dateien zu löschen:
find /home/alice -empty -exec rm {} \;
Tipps
- Verwende den Befehl mit Vorsicht, da er alle leeren Dateien in dem angegebenen Suchpfad löscht.
- Wenn du nach leeren Ordnern suchen möchtest, verwende die Option
-empty -type d
. - Die Suche nach leeren Dateien kann einige Zeit in Anspruch nehmen, insbesondere wenn du nach einem großen Verzeichnis suchst.
Verzeichnisse suchen
Der find
-Befehl hilft dir nicht nur, Dateien zu finden, sondern auch Verzeichnisse. Du kannst nach Verzeichnissen anhand von Kriterien wie dem Namen, den Berechtigungen oder dem Erstellungsdatum suchen.
Suche nach Verzeichnissen anhand des Namens
Um nach Verzeichnissen anhand des Namens zu suchen, verwende die Option -type d
. Du kannst dann den Namen des Verzeichnisses angeben, nach dem gesucht werden soll.
find / -type d -name "Verzeichnisname"
Suche nach Verzeichnissen anhand des Erstellungsdatums
Du kannst auch nach Verzeichnissen anhand ihres Erstellungsdatums suchen. Verwende dazu die Option -mtime
. Du kannst eine Zahl angeben, um nach Verzeichnissen zu suchen, die vor oder nach einer bestimmten Anzahl von Tagen erstellt wurden.
find / -type d -mtime -10
Dies sucht nach Verzeichnissen, die in den letzten 10 Tagen erstellt wurden.
Suche nach Verzeichnissen anhand der Berechtigungen
Du kannst auch nach Verzeichnissen anhand ihrer Berechtigungen suchen. Verwende dazu die Option -perm
. Du kannst eine Oktalzahl angeben, um nach Verzeichnissen mit bestimmten Berechtigungen zu suchen.
find / -type d -perm 755
Dies sucht nach Verzeichnissen, die für den Besitzer Lese-, Schreib- und Ausführungsberechtigungen und für die Gruppe und andere Schreib- und Ausführungsberechtigungen haben.