Ich habe eine harte Zeit, finden für die Spiele im aktuellen Verzeichnis zu sehen sowie dessen Unterverzeichnisse.
Wenn ich find *test.c
starte, werden mir nur die Übereinstimmungen im aktuellen Verzeichnis angezeigt. (schaut nicht in Unterverzeichnisse)
Wenn ich es versuche, find . -name *test.c
würde ich die gleichen Ergebnisse erwarten, aber stattdessen werden nur Übereinstimmungen angezeigt, die sich in einem Unterverzeichnis befinden. Wenn es Dateien gibt, die im Arbeitsverzeichnis übereinstimmen sollten, gibt es mir:find: paths must precede expression: mytest.c
Was bedeutet dieser Fehler und wie kann ich die Übereinstimmungen sowohl aus dem aktuellen Verzeichnis als auch aus seinen Unterverzeichnissen abrufen?
find
von msysgit kann diesen Fehler auslösen , wenn Sie das Muster mit Anführungszeichen:find . -name "*test.c"
. (Falls Sie es Windows vorziehen,find.exe
das sich vonAntworten:
Versuchen Sie es in Anführungszeichen zu setzen - Sie stoßen auf die Wildcard-Erweiterung der Shell. Das, was Sie tatsächlich suchen, sieht also so aus:
... den Syntaxfehler verursachen. Versuchen Sie dies stattdessen:
Beachten Sie die einfachen Anführungszeichen um Ihren Dateiausdruck - diese verhindern, dass die Shell (Bash) Ihre Platzhalter erweitert.
quelle
echo *test.c
. Das Ergebnis ist kein Echo, das den Platzhalter erweitert, sondern die Shell selbst. Die einfache Lektion ist, wenn Sie Platzhalter verwenden, zitieren Sie die Dateispezifikation :-)find . -type f -printf ‘%TY-%Tm-%Td %TT %p\n’
wie im Web gefunden, und wurde mit "Pfade müssen Ausdruck vorausgehen" getroffen. Problem war, dass die Anführungszeichen zu "klug" waren. Ich habe den Befehl erneut eingegeben, wodurch die Anführungszeichen ersetzt wurden, und er wurde ausgeführt.find
- wenn Sie einen Platzhalter verwenden*.$variable
, benötigen Sie doppelte Anführungszeichen.Was passiert ist, dass die Shell "* test.c" in eine Liste von Dateien erweitert. Versuchen Sie, dem Sternchen wie folgt zu entkommen:
quelle
find . -name '*txt'
Versuchen Sie es in Anführungszeichen zu setzen:
quelle
Aus dem Suchhandbuch:
quelle
Ich bin auf diese Frage gestoßen, als ich versucht habe, mehrere Dateinamen zu finden, die ich nicht zu einem regulären Ausdruck kombinieren konnte, wie in der Antwort von @Chris J beschrieben. Hier ist, was für mich funktioniert hat
-o
oder-or
ist logisch ODER. Weitere Informationen finden Sie unter Suchen von Dateien auf Gnu.org .Ich habe das auf CygWin ausgeführt.
quelle
In meinem Fall fehlte mir das Nachlaufen
/
.quelle
/
ist nicht erforderlich.