Warum gibt find
nicht die erwarteten Ergebnisse zurück? Hier ist, wie man das Problem behebt
Wenn Sie jemals den Befehl find
in Ihrem Unix-basierten System ausgeführt haben, sind Sie möglicherweise auf eine frustrierende Situation gestoßen, in der der Befehl Dateien nicht findet, von denen Sie wissen, dass sie vorhanden sind. Zum Beispiel möchten Sie möglicherweise nach Shell-Skriptdateien suchen, und obwohl Sie sicher sind, dass sie existieren, ist die Ausgabe leer. Dieses häufige Problem entsteht oft aus Missverständnissen darüber, wie der find
-Befehl Platzhalterzeichen interpretiert. Lassen Sie uns das Problem näher betrachten und die Lösungen entdecken, die Ihre Suche wieder auf den richtigen Weg bringen können.
Das Problem: find
funktioniert nicht wie erwartet
Betrachten Sie diesen Befehl, den Sie möglicherweise ausprobiert haben:
$ find /usr -name *.sh
Dieser Befehl soll nach allen Dateien mit der Erweiterung .sh
im Verzeichnis /usr
suchen. Wenn Sie jedoch feststellen, dass keine Ergebnisse angezeigt werden, fragen Sie sich vielleicht: Warum funktioniert find
nicht?
Sie wissen, dass die Skripte vorhanden sind; zum Beispiel, wenn Sie ausführen:
$ ls /usr/local/lib/*.sh
Sie können Dateien wie tclConfig.sh
und tkConfig.sh
sehen. Was läuft also bei Ihrem find
-Befehl falsch?
Das Problem verstehen
Das Hauptproblem liegt darin, wie das Befehlszeileninterpreter das Platzhalterzeichen *.sh
interpretiert. Insbesondere, wenn es Dateien in Ihrem aktuellen Verzeichnis gibt, die mit *.sh
übereinstimmen, erweitert die Shell dieses Platzhalterzeichen, bevor find
die Möglichkeit erhält, zu handeln. Dies kann zu unerwartetem Verhalten führen:
-
Platzhaltererweiterung
- Wenn
.sh
-Dateien in Ihrem aktuellen Verzeichnis existieren, z. B.tkConfig.sh
, wird das Eingeben vonfind /usr -name *.sh
zufind /usr -name tkConfig.sh
, wodurch Ihre Suche effektiv auf nur diese Datei beschränkt wird.
- Wenn
-
Syntaxfehler
- Wenn mehrere Dateien übereinstimmen, kann
find
aufgrund mehrdeutiger Argumente einen Syntaxfehler auslösen:find: ungültige Option tkConfig.sh
- Wenn mehrere Dateien übereinstimmen, kann
Lösung 1: Das Platzhalterzeichen in Anführungszeichen setzen
Um zu verhindern, dass die Shell das Platzhalterzeichen erweitert, bevor es an find
übergeben wird, können Sie das Platzhalterzeichen in Anführungszeichen setzen:
- Verwenden Sie entweder doppelte Anführungszeichen:
$ find /usr -name "*.sh"
- Oder verwenden Sie einfache Anführungszeichen:
$ find /usr -name '*.sh'
Indem Sie *.sh
in Anführungszeichen setzen, weisen Sie die Shell an, es unverändert an find
weiterzugeben, wodurch es möglich wird, nach allen .sh
-Dateien im angegebenen Verzeichnis zu suchen.
Lösung 2: Symbolische Links folgen
Ein weiterer möglicher Grund, warum find
nicht wie erwartet funktioniert, ist das Vorhandensein von symbolischen Links im Verzeichnis /usr
oder dessen Unterverzeichnissen. Standardmäßig folgt find
symbolischen Links nicht. Wenn Sie den Verdacht haben, dass dies der Fall ist, können Sie die Option -follow
verwenden:
$ find /usr -follow -name '*.sh'
Dieser Befehl ermöglicht es find
, symbolische Links zu durchqueren und nach den gewünschten Dateien zu suchen.
Fazit
Zusammenfassend lässt sich sagen, dass, wenn Sie feststellen, dass der Befehl find
nicht die erwarteten Ergebnisse liefert, wenn Sie nach Shell-Skripten suchen, dies wahrscheinlich an der Platzhaltererweiterung oder dem Vorhandensein symbolischer Links liegt. Denken Sie immer daran, Ihre Platzhalter in Anführungszeichen zu setzen, um eine vorzeitige Erweiterung zu verhindern, und verwenden Sie gegebenenfalls die Option -follow
. Durch die Anwendung dieser Strategien können Sie Ihre Shell-Skripte erfolgreich finden und Ihre Befehlszeilen-Kompetenz verbessern!
Viel Erfolg bei der Suche!
Jetzt sind Sie bereit, den find
-Befehl mit Zuversicht anzugehen! Wenn Sie Fragen oder weitere Probleme haben, hinterlassen Sie diese gerne in den Kommentaren unten.