Ich führe den folgenden Befehl aus, der jedoch nicht rekursiv ausgeführt wird:

find . -name *.java 

Ich weiß, dass sich Java-Dateien weiter unten im aktuellen Verzeichnis befinden, aber es führt die find nur für das aktuelle Verzeichnis aus. Ich verwende OS X, 10.9.

Antwort

Das Problem ist, dass Sie Ihre -Parameter. Führen Sie stattdessen Folgendes aus:

find . -name "*.java" 

Erläuterung

Ohne Anführungszeichen interpretiert die Shell *.java als Glob-Muster und erweitert es vor der Übergabe auf alle Dateinamen, die mit dem Glob übereinstimmen auf find. Wenn Sie beispielsweise foo.java im aktuellen Verzeichnis find lautet:

find . -name foo.java 

, wodurch die Datei offensichtlich nur im aktuellen Verzeichnis aufgelistet wird (es sei denn, Sie haben zufällig einen ähnlichen Namen Dateien weiter unten im Baum).

Das Zitieren verhindert die Glob-Erweiterung und übergibt die Befehlszeile an find wie sie ist.

Übrigens, wenn Der Glob konnte nicht übereinstimmen (keine *.java -Dateien im aktuellen Verzeichnis tory), Sie würden eines von zwei Verhaltensweisen erhalten, abhängig davon, wie Ihre Shell für Globs eingerichtet ist, die nicht übereinstimmen (dies wird beispielsweise durch die Option nullglob in Bash geregelt ):

  1. Wenn ein Glob, der nicht übereinstimmt, nicht von der Shell erweitert wird, zeigt find (aus Versehen wohlgemerkt) korrektes Verhalten.
  2. Wenn ein Glob, der nicht übereinstimmt, von der Shell zu einer leeren Zeichenfolge erweitert wird, beschwert sich find, dass ein Argument für -name.

Antwort

Ich hatte eine ähnliche Situation, in der ich die Umgebung umgab -name Wert in Anführungszeichen, aber immer noch nicht alle Suchhits, auf die ich gehofft hatte. Ich vermutete, dass es an Symlinks lag und dass dies der Fall war. Wenn Sie die Suche zum Durchsuchen von Symlinks erzwingen möchten, können Sie den Befehl wie folgt ändern:

find -L . -name "*.java" 

Kommentare

  • Symlinks waren auch mein Problem. -follow ist ein besser lesbares Synonym für -L, solange Sie es vor die anderen Parameter stellen.
  • Großartig ! Danke vielmals!! +1!

Antwort

Entkomme der *

find . -name \*.java 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.