it-swarm.com.de

Alle Dateien mit bestimmten Erweiterungen in Unix finden?

Ich habe eine Datei /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Ich versuche herauszufinden, ob ich * .jdk irgendwo anders auf meiner Festplatte habe. Also mache ich einen Suchbefehl:

find . -name "*.jdk"

Aber es findet nichts. Nicht einmal der, den ich kenne. Woher? 

48
Prostak

find . sucht nur in Ihrem aktuellen Verzeichnis. Wenn Sie die Berechtigung haben, nach Dateien in anderen Verzeichnissen zu suchen (root-Zugriff), können Sie die folgenden Dateien verwenden, um Ihre Datei zu finden

find / -type f -name "*.jdk"

Wenn Sie Tonnen von Nachrichten erhalten, denen die Berechtigung verweigert wurde, können Sie dies unterdrücken

find / -type f -name "*.jdk" 2> /dev/null
94
jaypal singh

ein/ 

find . bedeutet "find (beginnend im aktuellen Verzeichnis)." Wenn Sie das gesamte System durchsuchen möchten, verwenden Sie find /; Um unter /System/Library zu suchen, verwenden Sie find /System/Library usw.

b /

Es ist sicherer, einfache Anführungszeichen um Platzhalterzeichen zu verwenden. Wenn sich beim Ausführen keine Dateien mit dem Namen * .jdk im Arbeitsverzeichnis befinden, wird find eine Befehlszeile mit folgendem Befehl erhalten:

    find . -name *.jdk

Wenn Sie jedoch zufällig die Dateien junk.jdk und foo.jdk im Verzeichnis current haben , wenn Sie es ausführen, wird find stattdessen mit:

    find . -name junk.jdk foo.jdk

… Was es (da es zwei gibt) verwechseln wird und es zum Irrtum führen wird. Wenn Sie dann foo.jdk löschen und dasselbe noch einmal tun, müssen Sie dies tun

    find . -name junk.jdk

… Die niemals eine Datei mit dem Namen (z. B. 1.6.0.jdk) finden würde.

Was Sie in diesem Zusammenhang wahrscheinlich wollen, ist

    find /System -name '*.jdk'

… Oder Sie können den * wie folgt "fliehen":

    find /System -name \*.jdk
10
BRPocock

Wahrscheinlich sind Ihre JDKs in Großbuchstaben und/oder die unter OS X verfügbare Version von find ist nicht standardmäßig auf -print eingestellt, wenn keine Aktion angegeben ist. Versuchen:

find . -iname "*.jdk" -print

(-iname ist wie -name, führt jedoch eine Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung durch; -print sagt zu find, um die Ergebnisse auszudrucken.)

--- BEARBEITEN ---

Wie von @Jaypal festgestellt, sucht find . ... offensichtlich nur das aktuelle Verzeichnis (und die Unterverzeichnisse). Wenn Sie das gesamte Laufwerk durchsuchen möchten, müssen Sie / als Suchpfad angeben.

6
Matteo Italia

Das '.' Sie verwenden das aktuelle Verzeichnis. Wenn Sie in Ihrem Heimatverzeichnis beginnen, werden die JDK-Dateien wahrscheinlich fehlen.

Die Suche im ungünstigsten Fall beginnt mit root

 find / -name '*.jdk' -o -name '*.JDK' -print

Andernfalls ersetzen Sie '/' durch einen Pfad, der Ihrer JDK-Dateien übergeordnet sein sollte.

Ich hoffe das hilft.

2
shellter

find/-type f -name "* .jdk" funktioniert auch auf dem Mac

0
Dajena