Wie finde ich Dateien mit einem Sternchen im Dateinamen? Eine andere Möglichkeit, die Frage zu stellen, ist: Wie kann ich erreichen, dass sich ein Sternchen NICHT wie ein Platzhalter verhält?
Als Platzhalter würde ich normalerweise etwa Folgendes verwenden:
$ find ./ -type f \( -iname \*.jpg \)
Wenn ich nicht entkomme, *
erhalte ich folgendes
$ find ./ -type f \( -iname * \)
find: paths must precede expression: .....
find: possible unquoted pattern after predicate `-iname'?
Da der Fehler darauf hindeutet, dass *
in Anführungszeichen gesetzt werden muss, habe ich find ./ -type f \( -iname "*" \)
oder versucht find ./ -type f \( -iname '*' \)
, aber dies funktioniert auch als Platzhalter.
Antwort1
Die richtige Lösung scheint die Verwendung von eckigen Klammern zu sein [ ]
. Natürlich habe ich es 5 Minuten nach dem Posten gelöst. Ich hoffe, das hilft jemandem in der Zukunft.
$ find . -name '*[*]*' -type f
Man kann aber auch den Backslash verwenden, um das *
for zu umgehen.find
$ find . -name '*\**' -type f
Einfache Anführungszeichen werden verwendet, um sicherzustellen , dass *
, [
und \
verlieren die besondere Bedeutung, die sie auch fürdie Muschel.
Antwort2
Seien Sie vorsichtig. find(1) beschwert sich über etwas ganz anderes. Nehmen wir an, Sie haben im aktuellen Verzeichnis die Dateien a
, b
, c
. Wenn Sie beispielsweise Folgendes aufrufen:
find ./ -type f \( -iname * \)
was find
passiert, ist ./ -type f ( -iname a b c )
(die Shell erweitert '*', bevor sie die resultierende Befehlszeile an sie übergibt, die Klammern werden in Anführungszeichen gesetzt; genau dasselbe Ergebnis für ***
). Wenn Sie schreiben:
find ./ -type f \( -iname \* \)
es wird ./ -type f ( -iname * )
,