Das Dienstprogramm "find" gibt bei Verwendung von Platzhaltern nicht alle Dateien aus

467
dafnahaktana

Laufen:

$find . -name *.exe 

gibt:

./MakeItSo_1.2.2/MakeItSo_1.2.2/MakeItSo.exe ./MakeItSo.exe 

Dies sind jedoch nicht die einzigen Exe-Dateien im Verzeichnis. Zum Beispiel laufen

$find . -name ATLTester.exe 

gibt:

./Debug/ATLDmoVexaTester.exe 
3

1 Antwort auf die Frage

7
Kamil Maciorowski

Es ist wegen der Shell Globbing . Versuchen:

find . -name "*.exe" 

Wenn nicht in Anführungszeichen gesetzt, werden *.exealle *.exeDateien im aktuellen Verzeichnis erweitert, sofern keine vorhanden sind. Es kommt vor, dass Sie nur eine solche Datei dort haben, also war Ihr ursprünglicher Befehl tatsächlich:

find . -name MakeItSo.exe 

Wenn Sie keine *.exeDateien im aktuellen Verzeichnis hätten, findwürde das Shell-Globbing nicht auftreten, würde *.exewörtlich argumentiert und Ihr Befehl würde wie erwartet funktionieren. Wenn Sie jedoch mehr als eine Datei mit dieser Erweiterung haben, werden sie alle als Argumente angegeben findund dies führt zu Syntaxfehlern.

Gut beobachtet! Ich wunderte mich eine Weile über die Frage, bevor ich zu Ihrer Antwort blätterte. AFH vor 6 Jahren 0
@AFH Vergleichen Sie [diese Frage] (https://superuser.com/q/1217706/432690) von vor wenigen Stunden und meinen Kommentar dort. Zuerst dachte ich wie 'Déjà Vu?' Hier. Kamil Maciorowski vor 6 Jahren 0
Vielen Dank für den Hinweis: Ich habe die Option "-delete" nie bemerkt, daher ist es schön zu wissen, dass ich nie zu alt bin, um es zu lernen. AFH vor 6 Jahren 0
Das OP sagte aber auch, er habe `ATLTester.exe` im selben Verzeichnis. Hashim vor 5 Jahren 0
@Hashim In einem * Unterverzeichnis *. Das macht einen großen Unterschied. Kamil Maciorowski vor 5 Jahren 1
Ah, schöner Fang. Hashim vor 5 Jahren 0