
Ich lerne immer noch die Befehlszeile und habe einige Probleme, die Verwendung des Platzhalters im Find-Befehl vollständig zu verstehen.
Ich arbeite im Verzeichnis user/temp und verwende den Befehl find wie folgt, um alle .txt-Dateien zu finden:
find . -name *.txt -print
Dies gibt mir den Fehler:
find: unknown primary or operator.
Ich weiß, dass Sie einfache Anführungszeichen darum setzen müssen, *.txt
um die Erweiterung zu umgehen und das gewünschte Ergebnis zu erhalten. Ich verstehe jedoch nicht, warum dies getan werden muss.
Ich habe gelesen, dass man es maskieren muss, *
damit find
die Erweiterung intern erfolgt. Ich bin verwirrt, weil ich dachte, dass die Verwendung von einfachen Anführungszeichen dafür *
sorgt, dass die Befehlszeile es nicht als Sonderzeichen interpretiert. Wie erfolgt also die Erweiterung?
Antwort1
Es gibt hier zwei Teile, die versuchen könnten, das zu erweitern *
: die Shell beim Aufruf find
oder find
während der Verarbeitung/Verwendung ihrer Argumente.
Wenn Sie es nicht in einfache Anführungszeichen setzen, wird es von der Shell erweitert. Wenn Sie also a.txt und b.txt im aktuellen Verzeichnis haben, wird Ihre Befehlszeile von
find . -name *.txt -print
Zu
find . -name a.txt b.txt -print
Das ist kein gültiger find
Befehl
Wenn Sie es in einfache Anführungszeichen setzen, weisen Sie die Shell an, es in Ruhe zu lassen. Sie find
erhält daher die Zeichenfolge *.txt
als Argument -name
und verwendet sie beim Abgleichen potenzieller Namen.
Antwort2
Sie können versuchen, den Dateinamen in doppelte Anführungszeichen zu setzen.
suchen . -name "*.txt" -print
Das funktioniert auf meinem System (Debian 8)