Suchen Sie Ihren Mac über das Terminal?

22

Gibt es Befehle, um Ihren Mac mit dem Terminal zu durchsuchen? Ich habe versucht, mit grep zu suchen, aber es scheint nicht mehr zu reagieren, und es kommt nichts heraus.

Zum Beispiel würde ich "grep Files" (Ein Ordnername) eingeben und es wird nur eine leere Zeile gedruckt und nichts passiert.

JFW
quelle
Mögliches Duplikat der Suche in Textdateien unter Mac OS X
Chealion 18.08.10
Ich möchte alle Arten von Dateien durchsuchen. Nicht unbedingt Textdateien ausschließen, sondern nur Textdateien.
JFW

Antworten:

21

Sie können den mdfindBefehl auch verwenden , um eine Suche mit Spotlight durchzuführen. Mehr Infos hier .

Verwenden Sie diese mdfind -name searchtermOption, um Dateien mit dem Namen abzurufen searchterm. Verwenden Sie mdfind searchtermdiese Option, um nach Dateinamen und Inhalten zu suchen.

reg
quelle
25

Wenn Sie nur Dateien mit einem bestimmten Namen suchen möchten, verwenden Sie find

Die Manpage finden Sie HIER oder durch Eingabe man findan der Eingabeaufforderung des Terminals.

Grundsätzlich sucht find rekursiv nach einer Datei, die den von Ihnen angegebenen Kriterien entspricht. Das einfachste Beispiel:

find . -name file_name -print

Das wird nach einer Datei mit dem Namen "Dateiname" suchen, die im aktuellen Verzeichnis beginnt und darunter sucht, und die Dateien mit diesem Namen drucken.

find ~ -name ".DS_Store" -delete

Dadurch werden alle .DS_Store-Dateien gefunden und gelöscht.

Sie können nach Name, Regex und Datum suchen. Sie können mit dem -execPrädikat auf eine beliebige Unix-Art auf die Datei einwirken .

Sie können find auch als Start einer komplexeren Aktionspipeline verwenden. Beispiel:

find . -type f -print | egrep -i '\.m4a$|\.mp3$'

Findet alle Dateien mit den Endungen .m4a oder .mp3

find . -type f -print | egrep -i '\.m4a$|\.mp3$' | wc -l

Gibt Ihnen eine Anzahl dieser Dateien.

zeichnete
quelle
Wenn -printdas einzige Prädikat ist, kann es weggelassen werden. Es gibt auch einfaches Globbing. Das Auffinden aller .txtDateien in einem Verzeichnis fooerfolgt also mitfind foo -name \\*.txt
Norman Gray
@yoshi: Das ist absolut falsch. Typing find .ist rekursiv aus dem cwd. Versuchen Sie, find .in Ihr Stammverzeichnis zu tippen!
1.
Meine schlechte könnte schwören, es war nicht rekursiv, aber vielleicht hat Server -shrug-
nuala
5

Wenn Sie einen ganzen Ordner durchsuchen möchten, verwenden Sie einfach -r auf grep:

grep -r pattern folder/to/search

Mit find können Sie auch xargs verwenden:

find folder/to/search -name '*.txt' | xargs grep pattern

oder um sicherzustellen, dass Sie zwei Dateien gleichzeitig durchsuchen und daher die Dateinamen angegeben haben:

find folder/to/search -name '*.txt' | xargs grep -n2 pattern
Eric Darchis
quelle
2

greperwartet sowohl ein Muster als auch eine Dateispezifikation. Fehlt eines, wird das als Muster übergebene Muster verwendet und auf die Suche nach Daten über die Standardeingabe gewartet.

Wenn Sie eine komplexere Dateispezifikation verwenden möchten, verwenden Sie find.

find ~ -name '*.txt' -exec grep -q 'secret' {} \; -print
Ignacio Vazquez-Abrams
quelle
Ich möchte nur, dass es Dateien findet, die den Namen haben, den ich in den Befehl eingebe.
JFW
In diesem Fall müssen Sie das -execPrädikat nicht in verwenden find.
Ignacio Vazquez-Abrams