Suchen (find, locate, which)
Dateien & Verzeichnisse
Dateien finden
Auf einem Linux-System liegen schnell Tausende Dateien. Mehrere Werkzeuge helfen dir, gezielt das Richtige zu finden: find durchsucht das Dateisystem live nach vielen Kriterien, locate arbeitet blitzschnell über eine Datenbank, und which/whereis finden Programme. Wer suchen kann, spart enorm viel Zeit.
find – das Schweizer Taschenmesser
find durchsucht ein Verzeichnis (und alle Unterverzeichnisse) nach Dateien, die bestimmten Bedingungen entsprechen. Der erste Parameter ist das Startverzeichnis, danach folgen die Kriterien:
$ find . -name "*.txt" # alle .txt ab aktuellem Verzeichnis $ find /home -name "notiz*" # Namen, die mit notiz beginnen $ find . -iname "*.JPG" # -iname: Groß/Klein egal
Wichtige find-Kriterien
| Kriterium | Bedeutung |
|---|---|
-name "muster" | Nach Dateinamen (mit Wildcards) suchen |
-type f / -type d | Nur Dateien (f) bzw. Verzeichnisse (d) |
-size +10M | Größer als 10 MB (- für kleiner) |
-mtime -7 | In den letzten 7 Tagen geändert |
-exec … {} \; | Befehl für jeden Treffer ausführen |
Kriterien kombinieren
Mehrere Bedingungen werden standardmäßig mit UND verknüpft. So findest du z. B. alle Verzeichnisse mit einem bestimmten Namen oder große Logdateien:
$ find . -type d -name "cache" # nur Verzeichnisse namens cache $ find /var/log -type f -size +100M # große Logdateien $ find . -type f -mtime -1 # heute geänderte Dateien
-exec – etwas mit den Treffern tun
Mit -exec führst du für jeden Treffer einen Befehl aus. Das Platzhalterzeichen {} steht für den gefundenen Dateinamen, abgeschlossen wird mit \;:
$ find . -name "*.tmp" -exec rm {} \; # alle .tmp löschen
$ find . -name "*.sh" -exec chmod +x {} \; # alle Skripte ausführbar machen
Vorsicht: -exec rm löscht ohne Rückfrage. Teste den Fund zuerst ohne -exec oder ersetze es testweise durch -exec echo {} \;, um nur die Namen anzuzeigen.
locate – sekundenschnell
locate durchsucht nicht die Platte selbst, sondern eine vorbereitete Datenbank. Dadurch liefert es Ergebnisse fast augenblicklich – allerdings kann die Datenbank veraltet sein. Sie wird mit updatedb (als root) aktualisiert:
$ locate bashrc /etc/bash.bashrc /home/anna/.bashrc # updatedb # Datenbank aktualisieren
which und whereis – Programme finden
Willst du wissen, welches Programm bei einem Befehl ausgeführt wird, nutze which. Es zeigt den Pfad anhand der PATH-Variable. whereis findet zusätzlich Manpages und Quellen:
$ which python3 /usr/bin/python3 $ whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
Mit welcher Option beschränkt find die Suche auf Verzeichnisse?
Hinweis
Setze Suchmuster bei find immer in Anführungszeichen ("*.txt"), sonst löst die Shell die Wildcards vorzeitig auf – mehr dazu im nächsten Kapitel Globbing & Wildcards.