Interne Erweiterung mit dem Find-Befehl und Platzhalterzeichen

Interne Erweiterung mit dem Find-Befehl und Platzhalterzeichen

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, *.txtum 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 finddie 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 findoder findwä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 findBefehl

Wenn Sie es in einfache Anführungszeichen setzen, weisen Sie die Shell an, es in Ruhe zu lassen. Sie finderhält daher die Zeichenfolge *.txtals Argument -nameund 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)

verwandte Informationen