Normalerweise verwende ich diesen Befehlsstil, grep
um eine Reihe von Dateien zu überfliegen:
find / -xdev -type f -print0 | xargs -0 grep -H "800x600"
Tatsächlich wird eine Liste aller Dateien auf dem System erstellt und anschließend für jede Datei grep
mit den angegebenen Argumenten und dem Namen jeder Datei ausgeführt.
Das -xdev
Argument sagt find, dass es andere Dateisysteme ignorieren muss - dies ist gut, um spezielle Dateisysteme wie zu vermeiden /proc
. Es werden jedoch auch normale Dateisysteme ignoriert. Wenn sich Ihr / home-Ordner beispielsweise auf einer anderen Partition befindet, wird er nicht durchsucht find / /home -xdev ...
.
-type f
bedeutet, dass nur nach Dateien gesucht wird. Verzeichnisse, Geräte und andere spezielle Dateien werden ignoriert (es wird weiterhin in Verzeichnisse umgewandelt und grep
auf die darin enthaltenen Dateien angewendet - es wird nur nicht grep
auf das Verzeichnis selbst angewendet , was ohnehin nicht funktioniert). Und die -H
Option, ihn grep
anzuweisen, immer den Dateinamen in seiner Ausgabe zu drucken.
find
Akzeptiert alle Arten von Optionen zum Filtern der Dateiliste. Zum Beispiel -name '*.txt'
verarbeitet nur Dateien in TXT - Endung. -size -2M
bedeutet Dateien, die kleiner als 2 Megabyte sind. -mtime -5
bedeutet Dateien, die in den letzten fünf Tagen geändert wurden. Fügen Sie diese zusammen mit -a für und -o für oder hinzu und verwenden Sie '('
Klammern ')'
, um Ausdrücke zu gruppieren (in Anführungszeichen, um zu verhindern, dass die Shell sie interpretiert). Also zum Beispiel:
find / -xdev '(' -type f -a -name '*.txt' -a -size -2M -a -mtime -5 ')' -print0 | xargs -0 grep -H "800x600"
Schauen man find
Sie sich die vollständige Liste der möglichen Filter an.
Permission denied
Fehler? Haben Sie es als root oder als normaler Benutzer ausgeführt?