Ein häufiges Problem ist, dass man Dateien, die man irgendwo abgelegt hatte, nicht finden kann. Man kann natürlich über die Linux Dist UI die Dateien in Files / Dateieinmanager suchen. Aber warum sollte man nicht das Kommandozeilen-Terminal dazu nutzen? Insbesondere wenn Du über SSH auf dem Server eingeloggt bist, geht es ja nur mit Konsole. Und hier gibt es einige nette Programme. Wenn es um die Suche nach Dateien anhand ihres Namens geht, sind zwei erwähnenswert. Diese zwei möchte ich an dieser Stelle vorstellen und auf auf eins etwas genauer eingehen. Bei der Suche nach Dateien anhand ihres Inhaltes ist grep die erst Wahl. Dazu habe ich hier bereits einen Artikel geschrieben.
Dateien suchen mit find
„Find“ ist ein sehr komplexer Befehl, mit dem du Dateien auf der Grundlage einer Vielzahl von Bedingungen suchen können. Es ist ein sehr hilfreiches Werkzeug, wenn Du eine Datei anhand derer Namen suchst. Auch wenn man sich nicht mehr an den ganzen Namen erinnern kann, kann man mit Platzhaltern arbeiten. Mit dem Befehl “find” kannst du Datei- und Ordnernamen, Dateien nach Erstellungsdatum, Änderungsdatum und Berechtigungen suchen. Man kann diese Bedingungen auch im find Command kombinieren. „Find“ ist ein sehr leistungsstarkes, aber dennoch langsameres Suchwerkzeug. Langsam in der unixoiden Welt. Im Vergleich zu Windows ist es schnell.
Startpunkt
Zuerst musst man find mitteilen von wo an man suchen will. Also den <Startpunkt> nennen.
find
// sucht im aktuellen Verzeichnis
find /documents
// sucht im Verzeichnis "/documents".
find /documents /trash
// sucht in den Verzeichnissen "/documents" und "/trash"
find ~
// sucht in deinem Benutzerverzeichnis
find /
// sucht echt überall
Dateiname
Als nächstes muss man find sagen, wonach man eigentlich sucht <Dateiname>. Hier hat man die wahl zwischen -iname und -name. Mit -iname wird nicht Casesensitiv gesucht.
find <Startpunkt> -(i)name "<Dateiname>"
Falls Du zum Beispiel eine Migration Laravel Datei suchst und nicht den ganzen Namen eingeben willst, aber weißt es handelt sich um einen Namen wo products enthalten ist, dann kannst Du die mit Platzhaltern suchen.
find /database/migrations/ -name “*produtcs_*.php“
Oder Du suchst eine json Datei, wo du weisst das der Dateiname 6 Zeichen lang ist.
find /documents -name "??????.json"
Wenn Du nach leeren Dateien suchst, machst Du das mit:
find /kontoauszuege (-iname “*.pdf“) -empty
Wenn Du nach leeren Dateien suchst, machst Du das mit:
find /kontoauszuege (-iname “*.pdf“) -empty
Suche anhand von Datum und Uhrzeit
Mit „find“ kannst Du auch anhand des Datums nach Dateien suchen. Je nachdem, wann sie aufgerufen oder geändert wurden. Es gibt verschiedene Zeitangaben, die man für die Suche nach Dateien verwenden kann:
mtime (Modifikationszeit): wann der Inhalt der Datei zuletzt geändert wurde.
attime (Zugriffszeit): wann das letzte Mal auf die Datei zugegriffen wurde.
ctime (Änderungszeit): wann die Dateiattribute das letzte Mal geändert wurden.
Um z. B. nach Dateien in einem aktuellen Verzeichnis zu suchen, die vor weniger als 14 Tagen geändert wurden, führe den folgenden Befehl im Terminal aus:
find /app/models/ -mtime -14
Suche auf Basis der Dateigröße
Um z. B. Nach eine Datei zu suchen, deren Größe größer als 900 MB ist, können wir den folgenden Befehl im Terminal verwenden:
find /videos –size +900M\
Suche anhand von Dateiberechtigungen
Du suchst Dateien mit bestimmten Berechtigungen. Die allgemeine Syntax wäre hier:
find /vendor/ -type -perm mode
Wobei:
Der Parameter type erwartet die Werte d oder f. D steht für Directories / Ordner und f für File / Datei. Mit mode kann man entweder mit numerischer Berechtigung (z. B. 777, 655… usw.) oder mit symbolischer Berechtigung (z. B. u=x, a=r+x) suchen.
Um z. B. nach einer Datei mit der Berechtigung 644 zu suchen, können wir den folgenden Befehl im Terminal verwenden:
find /vendor -type f -perm 644
Das waren die wichtigsten Suchoptionen mit find. Es gibt noch einige weitere Suchparameter. Du findest die, wenn du in deiner Konsole „man find“ eingibst.
Suche nach Dateien mit locate
locate ist verdammt schnell. Hat aber einen Nachteil. Die Suchergebnisabdeckung ist wechselhaft. Das liegt am System von locate. Locate arbeitet mit einer internen Datenbank und iteriert die Dateien deiner Ordner vorab. Somit kann es viel schneller als find zum gewünschtem Suchergebnis führen. Locate macht sinn, wenn man ein relativ statisches Dateiensystem hat. Du kannst aber natürlich regelmäßig die locate Datenbank aktualisieren. Mit dem Befehl:
sudo updatedb
Da locate nicht standardmäßig in den Linux Dist enthalten ist, musst Du locate installieren.
sudo apt-get install locate
Und dann kann die Suche auch schon losgehen. Der Syntax ist
locate -i <Dateiname>
locate –i todo.txt
Und jetzt wünsch ich euch ein happy Searching!