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:

  1. Platzhaltererweiterung

    • Wenn .sh-Dateien in Ihrem aktuellen Verzeichnis existieren, z. B. tkConfig.sh, wird das Eingeben von find /usr -name *.sh zu find /usr -name tkConfig.sh, wodurch Ihre Suche effektiv auf nur diese Datei beschränkt wird.
  2. Syntaxfehler

    • Wenn mehrere Dateien übereinstimmen, kann find aufgrund mehrdeutiger Argumente einen Syntaxfehler auslösen:
      find: ungültige Option tkConfig.sh
      

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.

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.