Ich möchte mit dem Dateinamen eine Datei auf meinem MacBook finden: abc.dmg
. Ich habe versucht, Spotlight zu verwenden, aber es wird nicht gefunden. Als ich find ausprobiert und verwendet habe find -name abc.dmg -path /
, habe ich Fehler zurückbekommen.
Was ist die richtige Syntax, um eine Datei anhand des Dateinamens mit dem Befehl find auf einem Mac OSX-Terminal zu finden?
Antworten:
Nimmt in seiner einfachsten Form
find
einen Parameter: den Pfad. In seiner tatsächlich nützlichen Form folgt es dem Pfad, dem die Einengungskriterien folgen.So möchten Sie:
find
(das Programm)/
(der Pfad) und-name abc.dmg
(das Kriterium).quelle
find
Angelegenheiten . Wenn muss seinfind [path]+ [selection, grouping, and actions]
.find . -name '*.csv'
Zum Beispiel arbeitete für mich mit Wildcards. OP könnte auch verwendenfind . -name '*.dmg'
, um sein aktuelles Verzeichnis zu überprüfen, vorausgesetzt, er befand sich in/
.quelle
Der
mdfind
Befehl verwendet die Spotlight-Datenbankhttp://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html
quelle
Sie können den
locate
Befehl verwenden.quelle
osx
Tag. slocate db wird standardmäßig nicht gefüllt.locate
undmdfind
beide ausfallen, stehen die Chancen, die Datei nicht auf Ihrem Computer ist. Oder es ist nicht benannt, wie Sie denken, es ist benannt. Vielleicht ist die Suche nach ALLEN DMGs Ihr nächster Schritt?Der einfachste Weg (ich bin mir sicher, dass Sie es bereits versucht haben, aber hey, lassen Sie es mich trotzdem zum Thread hinzufügen) ist, abc.dmg in das Suchfeld oben rechts in einem Finder-Fenster einzugeben und dann "Datei" auszuwählen "Name" aus den Optionen in der angezeigten Suchleiste.
Das Terminal wird nicht benötigt.
Denken Sie auch daran, dass Spotlight nur Verzeichnisse indiziert, die in der Spotlight-Systemsteuerung angegeben sind, und abc.dmg sich möglicherweise nicht in einem dieser Verzeichnisse befindet.
Korrigieren Sie mich, wenn ich falsch liege, aber ich denke, der Befehl find muss wissen, was ausgegeben werden soll:
... sollte alle Ergebnisse auf dem Terminal ausgeben (einschließlich Berechtigungsfehlern).
Wenn Sie keine Berechtigungsfehler möchten und andere Benutzerverzeichnisse durchsuchen möchten, gehen Sie wie folgt vor:
quelle
Sie können die folgenden Befehlszeilenfunktionen verwenden, um relevante Dateien schnell zu finden und zu öffnen. Ich finde das einfacher, als lange Zeichenfolgen von Abfragen in das Spotlight-Fenster einzugeben.
Fügen Sie folgende Funktionen hinzu
~/.bash_aliases
.}
Nun kann man entweder
source ~/.bash_aliases
ein neues Terminal laden oder Funktionen öffnen. Gehen Sie wie folgt vor, um nach Dateien mit Wörtern, Kreisen und 2016 an einer beliebigen Stelle im Dateinamen zu suchenEs ist nicht erforderlich,
*
Ihrer Abfrage ein Präfix oder einen Anhang als Suchmuster hinzuzufügen, da die Platzhalter'*$1*'
am Anfang und Ende der Abfrage bereits markiert sind. Außerdemcd
werden bei Groß- und Kleinschreibungfred
keine diakritischen Zeichen angezeigt , z. B. werden sowohl Frédéric als auch FrEDeric zurückgegeben.findpaper
schränkt die Suche auf Ergebnisse unter einem bestimmten Pfad ein (rekursiv), währendopenpaper pie*201
ein Suchergebnis (oder das erste von mehreren Ergebnissen) oderopenpaper pie*201 3
der dritte Ergebniseintrag geöffnet wird. Um das Öffnen von Bash-Skripten oder anderen Nicht-Dokument-Dateien zu vermeiden, können Sie den Dateiinhalt durch zusätzliche Suchattribute einschränken. Weitere Informationen zur Verwendung anderer Suchoperatoren finden Sie unter Syntax von Abfrageausdrücken für Dateimetadaten und https://ss64.com/osx/mdfind.html .quelle
Erfassen Sie eine Liste aller Dateien auf Ihrer Festplatte als root von /
Durchsuchen Sie die gesamte Datei mit grep, um das gesamte Laufwerk zu durchsuchen:
Verwenden Sie reguläre Ausdrücke, um nur JPG- und DMG-Dateien anzuzeigen:
Ergebnis:
...usw. Leider werden auch alle gemounteten Datenträger erfasst, so dass die Time Machine-Datenträger mit vielen Links am besten ausgeworfen werden können. Also renne ich in einem anderen Fenster,
watch tail -n 10 ~/file-list.txt
das mir zeigt, wo es in meinem düsteren Hack liegt!quelle
sudo find / > ~/file-list.txt
scheint besser zu sein, als die gesamte Shell als root auszuführen. (2)find *
überspringt versteckte (Punkt-) Objekte (falls vorhanden) in/
. (3)&>
ist ein Bashismus. (4) Nutzlose Verwendung voncat
. (5)grep abc.dmg
druckt zB/foo/bar/123abcXdmg456/baz/whatever
. // Eine gute Sache, die Ihre Antwort auf diesen Thread bringt (und die andere Antwort nicht), ist der Ansatz, bei dem der Benutzerfind
einmal ausgeführt wird und das gespeicherte Ergebnis dann mehrmals wiederverwendet, ohne die Dateisysteme immer wieder abzufragen. Dieser potenzielle Vorteil wird jedoch nicht betont.