2010-12-28 17:42:34 +0000 2010-12-28 17:42:34 +0000
133
133

Wie finde ich eine Datei über den Dateinamen im Mac OSX-Terminal?

Ich möchte auf meinem Macbook eine Datei mit dem Dateinamen: abc.dmg finden. Ich habe versucht, Spotlight zu verwenden, aber es findet sie nicht. Als ich “find” versuchte und “find -name abc.dmg -path /” benutzte, bekam ich Fehler zurück.

Wie lautet die richtige Syntax, um eine Datei anhand des Dateinamens mit dem Befehl “find” auf einem Mac OSX-Terminal zu finden?

Antworten (7)

182
182
182
2010-12-28 17:45:50 +0000

In seiner einfachsten Form nimmt find einen Parameter: den Pfad. In seiner eigentlich nützlichen Form nimmt er den Pfad, dem einschränkende Kriterien folgen.

Sie wollen also:

  • find (das Programm)
  • / (der Pfad) und
  • -name abc.dmg (die Kriterien).
find / -name abc.dmg
26
26
26
2016-10-27 14:11:10 +0000

find . -name '*.csv' zum Beispiel arbeitete für mich mit Platzhaltern. OP könnte auch find . -name '*.dmg' verwenden, um sein aktuelles Verzeichnis zu überprüfen, vorausgesetzt, er befindet sich in /.

10
10
10
2010-12-28 19:21:39 +0000

Der Befehl mdfind verwendet die Spotlight-Datenbank http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html

6
6
6
2010-12-28 17:44:14 +0000

Sie können den Befehl locate verwenden.

locate abc.dmg
3
3
3
2010-12-28 22:53:12 +0000

Der einfachste Weg (was Sie sicher schon ausprobiert haben, aber hey, lassen Sie es mich trotzdem zum Thread hinzufügen) ist, die Datei abc.dmg in das Suchfeld oben rechts in jedem Finder-Fenster einzugeben und dann “Dateiname” aus den Optionen in der angezeigten Suchleiste auszuwählen.

Das Terminal wird nicht benötigt.

Denken Sie auch daran, dass Spotlight nur Verzeichnisse indiziert, die in der Spotlight-Systemsteuerung und in abc angegeben sind. dmg befindet sich möglicherweise nicht in einem dieser Verzeichnisse.

Korrigieren Sie mich, wenn ich falsch liege, aber ich denke, der Befehl find muss wissen, was ausgegeben werden soll:

find / -name abc.dmg -print

…sollte alle Ergebnisse an das Terminal ausgeben (einschließlich Berechtigungsfehler).

Wenn Sie keine Berechtigungsfehler wollen und andere Benutzerverzeichnisse durchsuchen wollen, dann:

sudo find / -name abc.dmg -print
2
2
2
2018-02-09 04:28:07 +0000

Sie können die folgenden Befehlszeilenfunktionen verwenden, um relevante Dateien schnell zu finden und zu öffnen. Ich finde das einfacher als die Eingabe einer langen Abfragezeichenfolge im Spotlight-Fenster.

Fügen Sie folgende Funktionen in ~/.bash_aliases hinzu.

# find any item matching search query in file name
spot(){
  mdfind "kMDItemDisplayName=='*$1*'cd";
}

# restrict to files under (recursive) a specific path 
findpaper(){
    mdfind -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd";
}

# default to open the first entry unless 2nd positional argument is given
openpaper(){
    FILEID=$(printf "%sp" ${2:-1})

    open "$(mdfind -name -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd" | sed -n "${FILEID}")"

}

Jetzt entweder source ~/.bash_aliases oder öffnen Sie eine neue Terminal-Ladefunktion. Wenn Sie nach Dateien mit Wörtern, Torte und 2016 an beliebiger Stelle im Dateinamen suchen möchten, tun Sie

spot pie*2016 #or
spot 2016*pie

Es ist nicht erforderlich, * Ihrer Suchanfrage als Suchmuster voranzustellen oder anzuhängen, denn '*$1*' kennzeichnet bereits die Eingabe von Platzhaltern am Anfang und am Ende Ihrer Anfrage. Zusätzliche cd ist für Groß- und Kleinschreibung unempfindlich und ignoriert diakritische Zeichen, z.B. gibt fred sowohl Frédéric als auch FrEDeric zurück.

findpaper schränkt die Suche auf Ergebnisse unter einem bestimmten Pfad (rekursiv) ein, während openpaper pie*201 ein (oder das erste von mehreren Ergebnissen) Suchergebnis oder openpaper pie*201 3 einen dritten Ergebniseintrag öffnet. Um das Öffnen von Bash-Skripten oder anderen Nicht-Dokument-Dateien zu vermeiden, können Sie Dateiinhalte durch zusätzliche Suchattribute einschränken. Siehe File Metadata Query Expression Syntax und https://ss64.com/osx/mdfind.html für die Verwendung anderer Suchoperatoren.

0
0
0
2019-06-09 11:50:48 +0000

Erfassen Sie eine Liste aller Dateien auf Ihrer Festplatte als root von /

sudo find / &> ~/file-list.txt
sudo chown $(whoami) ~/file-list.txt

Cat die gesamte Datei durch grep, um das gesamte Laufwerk zu durchsuchen:

cat ~/file-list.txt | grep abc.dmg

Verwenden Sie reguläre Ausdrücke, um nur .jpg- und .dmg-Dateien anzuzeigen:

cat ~/file-list.txt | grep -E "(\.dmg|\.jpg)"

Ergebnis:

Applications/Visualisations/CurvedSpaces-forMac.app/Contents/Resources/Textures/paper.jpg

…etc. Unglücklicherweise werden auch alle gemounteten Datenträger erfasst, so dass es am besten ist, die Time Machine Datenträger mit vielen Links auszuwerfen. Also lasse ich in einem anderen Fenster watch tail -n 10 ~/file-list.txt laufen, das mir zeigt, wo es in meinem heimtückischen Hack hingeht!