Gast
#1486265
Bin gerade unter Cygwin und beobachte seltsames Verhalten von find.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
1 | |
kopiert mir aber nur *h Dateien Ebenso ...
1 | |
2 | |
3 | |
4 | |
Woran liegt das? Bug oder Misserwartung meinerseits?
|
Anzeige
|
find utility
Gast
#1486265
Bin gerade unter Cygwin und beobachte seltsames Verhalten von find.
kopiert mir aber nur *h Dateien Ebenso ...
Woran liegt das? Bug oder Misserwartung meinerseits?
Gast
#1486266
was passiert bei
find ../mplab -iname "*.c" -or -iname "*.h" -echo {} . \;
Gast
#1486268
oh steht ja schon mit echo da - vergiss es
Gast
#1486272
BTW: does what i want
but still, what's wrong with the my first try?
Gast
#1486273
hehe Peter du bist schnell :) Hm ich hab mich auch erst gewundert... So funktionierts:
find ${DIR} \( -iname "*.cpp" -o -iname "*.h" \) -exec echo cp {} . \;
In der Manualpage von find steht folgendes:
EXPRESSIONS
The expression is made up of options (which affect overall operation
rather than the processing of a specific file, and always return true),
tests (which return a true or false value), and actions (which have side
effects and return a true or false value), all separated by operators.
-and is assumed where the operator is omitted.
Der letzte Satz ist der entscheidende.
Wenn man nun in den Abschnitt "OPERATORS" schaut, sieht man, das -a(nd)
eine höhere Präzedenz hat als -o(r). Was Du gemacht hast ist also
äquivalent zu
find ../mplab \( -iname "*.c" \) -or \( -iname "*.h" -exec cp {} \) . \;
Stephan
Miss Erwartung in voller Schönheit. Grund des Verhaltens: 1. Zwischen dem zweiten -iname und dem -exec steht kein Operator 2. Wegen des fehlenden Operators wird implizit ein AND angenommen (so also ob es
hieße) 3. AND hat eine höhere Priorität als OR bei find 4. Dadurch entspricht das dem Ausdruck:
Lösung: Richtig klammern!
(wobei das -a jetzt auch wieder weg gelassen werden kann, weil es ja implizit eingefügt werden würde) ok, umsonst nachgedacht :-) Ich schreib jetzt von zu Hause. Danke für Auflösung des Rätsels. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|