Frage

Ich suche nach Shell-Skriptdateien, die auf meinem System installiert sind, aber finden funktioniert nicht:

$ find /usr -name *.sh

Aber ich weiß, dass es eine Menge Skripte gibt.Zum Beispiel:

$ ls /usr/local/lib/*.sh
/usr/local/lib/tclConfig.sh  
/usr/local/lib/tkConfig.sh

Warum nicht finden arbeiten?

War es hilfreich?

Lösung

Versuchen Sie, den Platzhalter in Anführungszeichen zu setzen:

$ find /usr -name \*.sh

oder:

$ find /usr -name '*.sh'

Wenn Sie zufällig eine passende Datei haben *.Sch Im aktuellen Arbeitsverzeichnis wird der Platzhalter erweitert, bevor find ihn sieht.Wenn Sie zufällig eine Datei mit dem Namen tkConfig.sh in Ihrem Arbeitsverzeichnis haben, wird die finden Der Befehl würde erweitert werden zu:

$ find /usr -name tkConfig.sh

Dadurch würden nur Dateien mit dem Namen tkConfig.sh gefunden.Wenn Sie mehr als eine passende Datei haben *.Sch, würden Sie einen Syntaxfehler erhalten finden:

$ cd /usr/local/lib
$ find /usr -name *.sh
find: bad option tkConfig.sh
find: path-list predicate-list

Auch hier liegt der Grund darin, dass sich der Platzhalter auf beide Dateien ausdehnt:

$ find /usr -name tclConfig.sh tkConfig.sh

Durch Anführung des Platzhalters wird eine vorzeitige Erweiterung verhindert.

Eine andere Möglichkeit besteht darin, dass /usr oder eines seiner Unterverzeichnisse ein symbolischer Link ist. finden folgt normalerweise keinen Links, daher benötigen Sie möglicherweise die -folgen Möglichkeit:

$ find /usr -follow -name '*.sh'

Andere Tipps

Auf einigen Systemen (z. B. Solaris) gibt es keine Standardaktion, daher müssen Sie den Befehl -print hinzufügen.

find /usr -name '*.foo' -print

Um Dateien auf Ihren Festplatten zu finden, können Sie "Suchen" verwenden, um stattdessen sofort zu "zu suchen" (schaut in einen täglichen Index). Sie werden:

locate '/usr*.sh'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top