Vollständiger Leitfaden zum Linux-Befehl find

Überblick

In einer Linux-Umgebung gewünschte Dateien schnell zu finden und zu verarbeiten, gehört zu den grundlegenden und unverzichtbaren Fähigkeiten in der Serveradministration und Entwicklung. In diesem Artikel lernen wir Schritt für Schritt anhand praktischer Übungen die grundlegenden Suchoptionen des find-Befehls kennen – von der Suche nach Dateigröße und Änderungszeitpunkt bis hin zur Stapelverarbeitung (-exec) von Suchergebnissen.

Einrichtung der Übungsumgebung und grundlegende Suche nach Dateinamen

Um ein eigenes Verzeichnis für die praktischen Übungen mit dem find-Befehl zu erstellen und dorthin zu wechseln, führen wir den Befehl mkdir -p ~/find_lab/docs ~/find_lab/logs ~/find_lab/backup && cd ~/find_lab aus.

mkdir -p ~/find_lab/docs ~/find_lab/logs ~/find_lab/backup && cd ~/find_lab

Um Beispieldateien mit verschiedenen Dateiendungen für die Suchtests zu erstellen, führen wir den Befehl touch docs/app.log docs/guide.txt logs/error.log logs/access.log backup/data.bak aus.

touch docs/app.log docs/guide.txt logs/error.log logs/access.log backup/data.bak

Der find-Befehl durchsucht rekursiv alle Dateien und Verzeichnisse unterhalb des angegebenen Pfads anhand bestimmter Kriterien.
Wenn Sie den Befehl find . -name "*.log" ausführen, werden alle Dateien ausgegeben, die bezogen auf das aktuelle Verzeichnis (.) auf .log enden, zusammen mit ihrem Pfad.
Um zu verhindern, dass das Platzhalterzeichen (*) vorab von der Shell expandiert wird, wird das Suchmuster in doppelte Anführungszeichen gesetzt.
⚙️ [Wichtigste Optionen]

-name : Sucht unter Beachtung der Groß-/Kleinschreibung nach dem angegebenen Dateinamen oder -muster.
-iname : Sucht unabhängig von der Groß-/Kleinschreibung nach dem angegebenen Dateinamen oder -muster.
-type : Gibt den zu suchenden Dateityp an (f für reguläre Dateien, d für Verzeichnisse).
-size : Sucht anhand der Dateigröße (+ für größer als, - für kleiner als).
-mtime : Sucht anhand des Änderungszeitpunkts des Dateiinhalts (in Tagen).
-empty : Sucht nach leeren Dateien oder leeren Verzeichnissen.
-exec : Führt den angegebenen Linux-Befehl für jede gefundene Datei aus.
-delete : Löscht alle Dateien sofort, die den Suchkriterien entsprechen.

find . -name “*.log”

Um Dateinamen unabhängig von der Groß-/Kleinschreibung zu suchen, verwenden wir die Option -iname und führen den Befehl find . -iname "GUIDE.TXT" aus.
Selbst wenn der tatsächliche Dateiname in Kleinbuchstaben guide.txt lautet, stimmt er mit dem Suchkriterium in Großbuchstaben überein und der Dateipfad wird ordnungsgemäß gefunden.

find . -iname “GUIDE.TXT”

Große Dateien nach Dateityp und Dateigröße finden

Um die Suche nach Dateigröße zu testen, führen wir den Befehl truncate -s 15M ~/find_lab/backup/large_archive.iso aus, um eine 15 MB große Beispieldatei zu erstellen.

truncate -s 15M ~/find_lab/backup/large_archive.iso

Für weitere Größenvergleiche führen wir den Befehl truncate -s 2M ~/find_lab/logs/big_trace.log aus, um eine 2 MB große Protokolldatei zu erstellen.

truncate -s 2M ~/find_lab/logs/big_trace.log

Um reguläre Dateien auszuschließen und nur Verzeichnispfade zu filtern, führen wir den Befehl find ~/find_lab -type d mit der Option -type d aus.
Es wird übersichtlich nur die Liste aller Verzeichnisse ausgegeben, die sich unterhalb des angegebenen Pfads befinden.

find ~/find_lab -type d

Um unter den regulären Dateien (-type f) große Dateien mit mehr als 10 MB (-size +10M) zu finden und deren detaillierte Informationen anzuzeigen, führen wir den Befehl find ~/find_lab -type f -size +10M -exec ls -lh {} + aus.
Die den Kriterien entsprechende 15 MB große Datei large_archive.iso wird gefunden und zusammen mit detaillierten Berechtigungs- und Größenangaben ausgegeben.

find ~/find_lab -type f -size +10M -exec ls -lh {} +

Geänderte Dateien anhand von Zeitkriterien (mtime/mmin) finden

Um die Suche nach abgelaufener Zeit zu testen, führen wir den Befehl touch -d "2 days ago" ~/find_lab/backup/old_backup.tar aus, um eine Beispieldatei mit einem Änderungsdatum von vor zwei Tagen zu erstellen.

touch -d “2 days ago” ~/find_lab/backup/old_backup.tar

Um die Suche nach kürzlich geänderten Dateien zu testen, führen wir den Befehl touch ~/find_lab/logs/recent.log aus, um eine Beispieldatei mit dem aktuellen Zeitstempel zu erstellen.

touch ~/find_lab/logs/recent.log

Um reguläre Dateien zu suchen, die innerhalb der letzten 24 Stunden geändert wurden, wenden wir die Option -mtime -1 an und führen den Befehl find ~/find_lab -type f -mtime -1 aus.
Alle Dateien, die innerhalb des Zeitfensters (24 Stunden) erstellt oder geändert wurden, werden ordnungsgemäß aufgelistet.

find ~/find_lab -type f -mtime -1

Um ältere Dateien zu finden, deren Änderung länger als 24 Stunden (1 Tag) zurückliegt, wenden wir die Option -mtime +1 an und führen den Befehl find ~/find_lab -type f -mtime +1 aus.
Nur die vor zwei Tagen erstellte Datei old_backup.tar wird präzise herausgefiltert und ausgegeben.

find ~/find_lab -type f -mtime +1

Stapelverarbeitung von Suchergebnissen: Die Option -exec und Löschvorgänge

Um die Stapelverarbeitung und das Ändern von Berechtigungen zu üben, führen wir den Befehl mkdir -p ~/find_lab/temp && touch ~/find_lab/temp/cache1.tmp ~/find_lab/temp/cache2.tmp aus, um ein temporäres Verzeichnis sowie temporäre Beispieldateien anzulegen.

mkdir -p ~/find_lab/temp && touch ~/find_lab/temp/cache1.tmp ~/find_lab/temp/cache2.tmp

Um die Zugriffsrechte aller gefundenen Dateien mit der Endung .tmp gesammelt auf 644 zu ändern, wenden wir die Option -exec an und führen den Befehl find ~/find_lab/temp -name "*.tmp" -exec chmod 644 {} \; aus.
Der Platzhalter {} wird durch den Pfad der jeweils gefundenen Datei ersetzt, und \; markiert das Ende des an -exec übergebenen Befehls.

find ~/find_lab/temp -name “*.tmp” -exec chmod 644 {} ;

Um zu überprüfen, ob die Rechteänderung ordnungsgemäß übernommen wurde, führen wir den Befehl ls -l ~/find_lab/temp aus.
In der Ausgabe ist ersichtlich, dass beide temporären Dateien auf Lese- und Schreibrechte (-rw-r--r--, 644) geändert wurden.

ls -l ~/find_lab/temp

Um die Suchkriterien erfüllenden .tmp-Dateien gesammelt zu löschen, kombinieren wir dies mit dem Befehl rm -f und führen find ~/find_lab/temp -name "*.tmp" -exec rm -f {} \; aus.
Ohne separate Bestätigungsabfrage werden die gefundenen Zieldateien auf einmal entfernt.

find ~/find_lab/temp -name “*.tmp” -exec rm -f {} ;

Um abschließend zu prüfen, ob alle temporären Dateien ordnungsgemäß gelöscht wurden, führen wir den Befehl ls -la ~/find_lab/temp aus.
Es verbleiben lediglich das aktuelle Verzeichnis (.) und das übergeordnete Verzeichnis (..), was zeigt, dass alle erstellten temporären Dateien sauber entfernt wurden.

ls -la ~/find_lab/temp

In diesem Leitfaden haben wir die wichtigsten Suchoptionen des Linux-Befehls find sowie praxisnahe Techniken zur Stapelverarbeitung zusammengefasst.
Kombinieren Sie die vorgestellten Optionen je nach Anwendungsfall, um Ihre Dateisuche und Dateiverwaltung noch effizienter zu gestalten.