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 ):
- Wenn ein Glob, der nicht übereinstimmt, nicht von der Shell erweitert wird, zeigt
find
(aus Versehen wohlgemerkt) korrektes Verhalten. - 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